Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Felder & Werte in Tabelle umschreiben

Begonnen von FrankiLi, November 10, 2016, 09:31:29

⏪ vorheriges - nächstes ⏩

FrankiLi

Hallo zusammen,

ich habe eine Tabelle wie folgt:

Artikel | Farbe | Größe
ABC123 | weiß | 180

Diese muss regelmässig/dynamisch bzw. konkreter jeweils bei einem Export (täglich) wie folgt umstrukturiert werden:

Artikel | Attribut1 | Attribut1 Wert | Attribut2 | Attribut2 Wert
ABC123 | Farbe | weiß | Größe | 180

***** EDIT: Was Entscheidendes vergessen, echtes Beispiel 2 Beiträge weiter unten ******

Wie kann ich das umsetzen per Abfragen/Makro/VBA (von letzterem habe ich leider (noch) keine Ahnung), quasi dass dieser "Umbau" auf Knopfdruck funktioniert?

Vielen Dank vorab
Gruss
Frank

DF6GL

Hallo,

---besteht die Tabelle nur aus diesen einen Datensatz?

mach mal ein ausführlicheres Beispiel.


---in WAS soll exportiert werden?

---Müssen die einzelnen Werte in separate Felder gelegt werden oder können sie zu einen einzelnen String zusammengefasst werden?
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

FrankiLi

Hallo Franz,

die Tabelle hat mehrere zehntausend Datensätze (hier: ABC123), es geht um ca. 80 Attribute (hier: Farbe, Größe).

Das Ergebnis kann in der gleichen oder einer neuen Tabelle stehen, spielt keine Rolle, der Export an sich ist auch nicht das Thema, ich brauche die Export-Basis.

Die Werte müssen wie oben geschildert in einzelnen Felder stehen.

Wobei ich noch etwas Wichtiges vergessen habe, deshalb das Beispiel von oben nochmal konkreter:

Ausgangsbasis:
Artikel | Farbe | Größe
ABC123 | weiß | 180
ABC234 | NULL | 170

Gewünschtes Ergebnis:
Artikel | Attribut1 | Attribut1 Wert | Attribut2 | Attribut2 Wert
ABC123 | Farbe | weiß | Größe | 180
ABC234 | Größe | 170       --> Hier wurde Attribut "Farbe" plus entsprechender Wert "übersprungen", weil es keinen Wert gibt. Größe war also beim ersten Artikel "Attribut 2", bei Artikel ABC234 ist es "Attribut 1".



DF6GL

#3
Hallo,


Zitates geht um ca. 80 Attribute (hier: Farbe, Größe).

und warum zeigst  Du das nicht im Beispiel??   


entspr. dem dargestellten Beispiel:

SELECT Artikel, IIf([Farbe] Is Null,"Größe","Farbe") AS Attr1, IIf([Farbe] Is Null,[Größe],[Farbe]) AS Wert1, IIf([Farbe] Is Null,Null,"Größe") AS Attr2, IIf([Farbe] Is Null,Null,[Größe]) AS Wert2
FROM Tabelle1




Wenn es sich um mehr als diese zwei Attribute handelt und die leeren Spalten unterdrückt werden sollen, ist eine entspr. VBA-Prozedur von Nöten.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

FrankiLi

OK, danke, klappt aber so ja nicht mit 80 Attributen und allen Kombinationen :)

Zitatund warum zeigst  Du das nicht im Beispiel??   
Wie meinst Du das? Warum ich nicht 80 Beispiel-Attribute aufschreibe? Dass es 80 sind habe ich doch geschrieben...

DF6GL

Hallo,

lies nochmal mein letztes Posting wegen dem Nachsatz.

Weiterhin muss (müsste) der Export am Besten  in eine CSV-Datei erfolgen.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

FrankiLi

ZitatWenn es sich um mehr als diese zwei Attribute handelt und die leeren Spalten unterdrückt werden sollen, ist eine entspr. VBA-Prozedur von Nöten.

Ok, dabei bräuchte ich Hilfe.
Export in csv wäre ok.

crystal

Hallo FrankiLi,
Frage zum Verständnis:
Woher stammen die Attribut-Bezeichnungen? Sind dies tatsächlich 80 Felder in der Artikel-Tabelle?

lg
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

FrankiLi

Hallo Crystal,

ja, genau so ist es.

Gruss
Frank

DF6GL

#9
Hallo,

Export in eine CSV:

Public Function FktCsvExport()
Dim DB As DAO.Database, RS As DAO.Recordset, i As Long, Tmp As String, LU As Long

Set DB = CurrentDb()
LU = FreeFile
 
Open "C:\Temp\Output.CSV" For Output As LU
  Set RS = DB.OpenRecordset("Select * from tbl_ArtikelAttribute order by Artikel", dbOpenSnapshot)
  Do Until RS.EOF
      Tmp = """" & RS(0) & """"
      For i = 1 To RS.Fields.Count - 1 Step 2
        If Not IsNull(RS(i)) Then
        Tmp = Tmp & ";""" & RS(i).Name & """;""" & RS(i) & """;""" & RS(i + 1).Name & """;""" & RS(i + 1) & """"
        End If
      Next
      RS.MoveNext
      'Debug.Print Tmp
       Print #LU, Tmp
   Loop
RS.Close
Set RS = Nothing
Close LU

End Function

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

crystal

Hallo,
hier noch ein anderer Ansatz, der ohne VBA auskommt:
erstelle eine Abfrage wie
ZitatSELECT "Artikel|"& ArtId as Artikel,
IIf(Nz([Farbe]),"|Farbe|" & [Farbe]) AS F1,
IIf(Nz([Größe]),"|Größe|" & [Größe]) AS F2,
IIf(Nz([Länge]),"|Länge|" & [Länge]) AS F3,
IIf(Nz([Breite]),"|Breite|" & [Breite]) AS F4
FROM Artikel;
Anmerkungen:
1. im Abfrage-Entwurf SQL-Ansicht
2. die 2. Zeile kopieren und einfügen
3. Attribut-Namen anpassen
4. als Trennzeichen habe ich hier "|" benutzt

5. Dies ist eine kleine Fleißarbeit, sozusagen als "Strafe" für das "missglückte" Design der Artikel-Tabelle.

Ausgehend von folgender Mini-Tabelle
Zitat-----------------------------------------------------------------------------------------------------
|       ArtId       |       Farbe       |       Größe       |       Länge       |      Breite       |
-----------------------------------------------------------------------------------------------------
|                 1 | blau              | 170               |                   |                   |
-----------------------------------------------------------------------------------------------------
|                 2 | rot               | 180               |                   |                   |
-----------------------------------------------------------------------------------------------------
|                 3 | blau              |                   | 17                | 5                 |
-----------------------------------------------------------------------------------------------------
|                 4 | grün              |                   | 123               | 45                |
-----------------------------------------------------------------------------------------------------
liefert diese Abfrage, wenn man sie als Text exportiert:
ZitatArtikel|1 |Farbe|blau |Größe|170 
Artikel|2 |Farbe|rot |Größe|180 
Artikel|3 |Farbe|blau  |Länge|17 |Breite|5
Artikel|4 |Farbe|grün  |Länge|123 |Breite|45

In der Export-Definition musst du (nach Klick auf Erweitert) als Feldtrennzeichen (Leerzeichen) und als Textqualifizierer (kein) eintragen.

Leider entstehen dadurch Leerzeichen in der Ausgabe, das wird aber den späteren Import vermutlicch nicht stören. Ansonsten müsste man als Trennzeichen z.B. "§" definieren und dann mit einem Editor in der exportierten Datei durch <nichts> ersetzen.

OK - dieser Ansatz ist natürlich nicht so elegant wie der von DF6GL, aber es klappt (einigermaßen).

lg
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

FrankiLi

Meine Güte, danke Ihr Beiden!

Zitat5. Dies ist eine kleine Fleißarbeit, sozusagen als "Strafe" für das "missglückte" Design der Artikel-Tabelle.
Ischweiss, das ist aber momentan noch bewusst/absichtlich falsch, geht aus div. Gründen gerade nicht anders.

Ich würde jetzt mal Franz' Lösung testen, weil ich ohnehin VBA und Module gerne grundsätzlich besser verstehen würde (Crystal, Dein Ansatz hilft mir trotzdem in einem anderen aber ähnlichen Sachverhalt)

@Franz: Es läuft soweit, im Fenster sieht man auch die Ergebnisse, die Datei wird auch erstellt - aber sie ist leer. Mache ich etwas falsch?

Und: Lässt sich mit einfachen Mitteln noch dazu-coden, dass dieses Prinzip erst ab der 3. Spalte der Ausgangstabelle gilt und die ersten beiden (IDs) unverändert übernommen werden?

DF6GL

Hallo,

hast Du den Tabellenamen angepasst?

Zitatdass dieses Prinzip erst ab der 3. Spalte der Ausgangstabelle gilt und die ersten beiden (IDs) unverändert übernommen werden?

Wie meinst Du das?  Was sind die "ersten beiden" ID's?
Und wieso habe die nicht die selbe Struktur wie die restlichen DS?

Zitatmomentan noch bewusst/absichtlich falsch, geht aus div. Gründen gerade nicht anders.

Warum nicht?  Hier wird vermutlich der Teufel mit dem Beelzebub ausgetrieben...
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

FrankiLi

Zitathast Du den Tabellenamen angepasst?
Klar, ich sehe ja auch die Ergebnisse/Datensätze im Direktbereich durchlaufen.

ZitatWie meinst Du das?  Was sind die "ersten beiden" ID's?
Und wieso habe die nicht die selbe Struktur wie die restlichen DS?
Naja... wie soll ichs besser beschreiben, ok so:

ID | Artnr | Farbe | Größe

Die Funktion soll erst ab Spalte 3 (Farbe) diesen "Umbau" veranstalten.
ID und Artnr sollen so bleiben, wie sie sind, Felder mit Werten.

DF6GL

Hallo,

Du willst doch üben/verstehen..

Du brauchst nur bei der Initialisierung der TMP-Variablen  RS(1) hinzufügen und die For-Schleife beim Startwert anpassen.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access