Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: FrankiLi am November 10, 2016, 09:31:29

Titel: Felder & Werte in Tabelle umschreiben
Beitrag von: FrankiLi am November 10, 2016, 09:31:29
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
Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: DF6GL am November 10, 2016, 09:43:07
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?
Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: FrankiLi am November 10, 2016, 09:48:20
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".


Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: DF6GL am November 10, 2016, 12:24:48
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.
Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: FrankiLi am November 10, 2016, 12:27:11
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...
Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: DF6GL am November 10, 2016, 12:31:23
Hallo,

lies nochmal mein letztes Posting wegen dem Nachsatz.

Weiterhin muss (müsste) der Export am Besten  in eine CSV-Datei erfolgen.
Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: FrankiLi am November 10, 2016, 12:32:55
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.
Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: crystal am November 10, 2016, 12:49:55
Hallo FrankiLi,
Frage zum Verständnis:
Woher stammen die Attribut-Bezeichnungen? Sind dies tatsächlich 80 Felder in der Artikel-Tabelle?

lg
crystal
Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: FrankiLi am November 10, 2016, 12:50:32
Hallo Crystal,

ja, genau so ist es.

Gruss
Frank
Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: DF6GL am November 10, 2016, 13:07:50
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

Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: crystal am November 10, 2016, 14:18:31
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
Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: FrankiLi am November 10, 2016, 14:43:36
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?
Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: DF6GL am November 10, 2016, 15:06:23
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...
Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: FrankiLi am November 10, 2016, 15:24:27
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.
Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: DF6GL am November 10, 2016, 15:59:58
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.
Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: crystal am November 10, 2016, 18:54:34
...und ein solches statement einbauen:

write LU, tmp  (zusätzlich zu debug.print tmp, das dann auskommentieren)

@DF6GL: bitte mein statement korrigieren
Frage noch: wozo die vielen Anführungszeichen?

lg
crystal
Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: DF6GL am November 10, 2016, 22:35:21
Hallo,

ja, danke für den Hinweis, das Schreiben in die Datei hat gefehlt. (Habe meinen Beitrag dementsprechend korrigiert)

Zitatwozo die vielen Anführungszeichen

Gänsefüße in einer CSV-Datei definieren den Wert als TEXT.

Sie sind aber hier eigentlich nicht unbedingt nötig und sollen nur als Beispiel dienen.
Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: crystal am November 11, 2016, 12:27:38
@DF6GL
ZitatGänsefüße in einer CSV-Datei definieren den Wert als TEXT.

Das war schon klar, die Frage ist nur, welche Trennzeichen bzw. Textmarkierer beim Import benötigt werden und ob beim Import "170" dann auch als Zahl 'ankommt' und der Text <blau> (ohne spitze Klammern) als Text.

Wenn alle 80 Atribute numerisch sind, braucht man keine Gänsefüßchen.

Nur so Gedanken, es hängt wohl davon ab, wie tolerant die Import-Funktion ist.

lg
crystal
Titel: Re: Felder & Werte in Tabelle umschreiben
Beitrag von: FrankiLi am November 14, 2016, 11:12:04
Zitat von: DF6GL am November 10, 2016, 15:59:58
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.
Hallo Franz,

Du hast natürlich völlig Recht: Will ich.
Ich muss allerdings darauf achten, dass sich Lernen einerseits, und der Projektfortschritt andererseits die Waage halten.

Kannst Du mir bei einem Punkt bitte auf die Sprünge helfen:
In der CSV-Datei sollen noch die Spalten-Namen mitgegeben werden. Für Spalte 1-3 der Originalname (da wird ja nichts verändert), und dann Attribut 1 Name | Attribut 1 Wert - Attribut 2 Name | Attribut 2 Wert  usw....