Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Dynamische zuweisung von Spalten (https://www.delphipraxis.net/181803-dynamische-zuweisung-von-spalten.html)

freak4fun 10. Sep 2014 09:07

Dynamische zuweisung von Spalten
 
Hallo Leute,

ich habe mehrere CSV-Dateien mit mehreren verschiedenen Spaltenköpfen, die in einer Datenbank gespeichert werden sollen.

Der Anwender meines Programms soll die Spalten der CSV-Dateien verknüpfen können. Zum Beispiel wenn die erste CSV-Daten eine
Spalte "Nachnamen" und die zweite CSV-Datei eine Spalte "Name" hat, das alle Namen als eine Spalte behandelt werden, die dem
Anwender unter einer selbst gewählten Überschrift zum Beispiel "Freunde" angezeigt werden. Wenn eine dritte CSV-Datei keines dieser
Spalten enthält, sollen die anderen Spalten aber dennoch gespeichert werden, so das keine Daten "verloren" gehen.

Mir fehlt der Ansatz, oder eine alternative zu meiner Idee. Über Anregungen würde ich mich sehr freuen.

Der schöne Günther 10. Sep 2014 09:11

AW: Dynamische zuweisung von Spalten
 
Aber das "Konvertieren" CSV -> Datenbank ist ein einmaliger Vorgang, oder? Wieviele CSV-Dateien hat der Benutzer denn für gewöhnlich? Ich hätte eine Datei nach der anderen eingelesen und den Benutzer dann gefragt, welche "CSV-Spalte" in welche Tabellenspalte kommen soll.

Oder weißt du im Vorhinein nichts über den CSV-Inhalt und wie deine Tabellen am Schluss aussehen ist anfangs völlig unklar? :o

freak4fun 10. Sep 2014 09:22

AW: Dynamische zuweisung von Spalten
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1271952)
Aber das "Konvertieren" CSV -> Datenbank ist ein einmaliger Vorgang, oder?

Ich denke schon. Es gibt mehrere CSV-Dateien vom gleichen Typ, also mit identischen Spaltenköpfen, die importiert werden.

Zitat:

Zitat von Der schöne Günther (Beitrag 1271952)
Wieviele CSV-Dateien hat der Benutzer denn für gewöhnlich?

Es ist wahrscheinlich 1 Datei pro Woche, kann aber variieren. Dabei wird aber immer eine CSV-Datei eines Typs verwendet.
Das Problem tritt nur auf, wenn sich das Format ändert.

Zitat:

Zitat von Der schöne Günther (Beitrag 1271952)
Ich hätte eine Datei nach der anderen eingelesen und den Benutzer dann gefragt, welche "CSV-Spalte" in welche Tabellenspalte kommen soll.

Bei jeder Datei? Würde es Sinn machen da eine Vorlage draus zu machen?

Zitat:

Zitat von Der schöne Günther (Beitrag 1271952)
Oder weißt du im Vorhinein nichts über den CSV-Inhalt und wie deine Tabellen am Schluss aussehen ist anfangs völlig unklar? :o

Ja, genau das ist der Fall. Ich würde die Spalten auch gern in drei Typen aufteilen: Zeichenkette, Ganzzahl und Dezimalzahl. Aber das ist denke ich erst später dran.

Der schöne Günther 10. Sep 2014 09:28

AW: Dynamische zuweisung von Spalten
 
Also von heute auf morgen kommen ganz anders strukturierte CSV-Dateien rein und das Programm soll darauf vorbereitet sein.

Gehört dazu dann auch eine so weit gehende "Verknüpfung" dass du bislang eine Spalte "Name" bekamst und die CSVs nun in "Nachname" und "Vorname" aufgesplittet sind und das Programm erlauben soll, "Vorname + Nachname" in die bereits existierende DB-Spalte "Name" zu schreiben?

Entweder fehlt es mir an Fantasie, oder das ganze ist nicht trivial. Es sei denn, man stellt die Ursache der sich ändernden CSV-Struktur ab ;-)

freak4fun 10. Sep 2014 09:40

AW: Dynamische zuweisung von Spalten
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1271957)
Also von heute auf morgen kommen ganz anders strukturierte CSV-Dateien rein und das Programm soll darauf vorbereitet sein.

Richtig.
Zitat:

Zitat von Der schöne Günther (Beitrag 1271957)
Gehört dazu dann auch eine so weit gehende "Verknüpfung" dass du bislang eine Spalte "Name" bekamst und die CSVs nun in "Nachname" und "Vorname" aufgesplittet sind und das Programm erlauben soll, "Vorname + Nachname" in die bereits existierende DB-Spalte "Name" zu schreiben?

Nein. Eine Spalte ist eine Spalte und kann auch nur mit einer Spalte aus einer anderen CSV-Datei verknüpft werden.
Zitat:

Zitat von Der schöne Günther (Beitrag 1271957)
Entweder fehlt es mir an Fantasie, oder das ganze ist nicht trivial.

Das beruhigt mich.:thumb:
Zitat:

Zitat von Der schöne Günther (Beitrag 1271957)
Es sei denn, man stellt die Ursache der sich ändernden CSV-Struktur ab ;-)

Darauf habe ich leider keinen Einfluss.

Der schöne Günther 10. Sep 2014 09:49

AW: Dynamische zuweisung von Spalten
 
Was ich nur noch nicht verstanden habe ist, ob es mehr werden. Soll deine Datenbank auf lange Sicht immer mehr Spalten bekommen können?

freak4fun 10. Sep 2014 09:55

AW: Dynamische zuweisung von Spalten
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1271965)
Was ich nur noch nicht verstanden habe ist, ob es mehr werden. Soll deine Datenbank auf lange Sicht immer mehr Spalten bekommen können?

Im Idealfall nicht, da gibt es immer nur das eine Datei-Format. Das regelmäßig importiert wird.
Ich möchte aber vorbereitet sein (und finde das Thema selbst spannend). Ich weiß nicht mal wie häufig der Fall eintreten kann.

Jumpy 10. Sep 2014 10:05

AW: Dynamische zuweisung von Spalten
 
Ich hab mich mal eine Zeitlang mit dem Import-Assistenten von Lexware rumgeschlagen. Ähnlich wie beim CSV-Import von Excel hat man da mehrere Schritte:

1. Zu importierende Datei auswählen
2. "CSV-Art" auswählen, d.h. "Feste Breite" vs. "Trennzeichen getrennt"
3. Trennzeichen festlegen
4. Spalten der CSV den Spalten der DB zuordnen
(da die Datentypen der DB "fix" sind, geben sie vor, wie die einkommenden Daten interpretiert werden.
5. Vorschau der ersten 2-3 Datensätze wie die zugeordnet werden
6. Durchführen des Imports
7. Speichern der Einstellungen (Zuordnungen) als Profil

Später können dann Schritte (1 oder) 2 bis 4 (oder 5) durch Auswählen eines Profils übersprungen werden.

Das Programm muss natürlich erkennen, wenn ein Profil nicht mehr passt (andere Spaltennamen in der CSV, oder diese an anderer Stelle) und entsprechend warnen.

freak4fun 10. Sep 2014 10:13

AW: Dynamische zuweisung von Spalten
 
Danke Jumpy,

das hilft schon mal weiter.
Zitat:

Zitat von Jumpy (Beitrag 1271972)
4. Spalten der CSV den Spalten der DB zuordnen
(da die Datentypen der DB "fix" sind, geben sie vor, wie die einkommenden Daten interpretiert werden.

Dann muss ich mir an der Stelle Gedanken über die DB-Struktur machen. Und wie ich Spalten die in der einen aber nicht in der anderen Datei sind behandle.:pale:

Jumpy 10. Sep 2014 11:48

AW: Dynamische zuweisung von Spalten
 
Irgendwo musst du das machen oder anderes ausgedrückt irgendeinen Tod musst du sterben. Wenn du nicht irgendeine KI programmieren willst, die alles erkennt egal was da kommt und es automatisch richtig zuordnet, musst du das den User machen lassen.

Vllt. hab ich mich aber auch falsch ausgedrückt. In so einem Assistenten hast du Links eine Art Listbox mit allen Spalten der CSV (Headernamen) und rechts eine Art zweispaltiger Listbox o. Stringlist mit allen Spalten der Datenbank in der linken Spalte. Dann kannst du aus der linken Listbox einen Spaltennamen der CSV rausziehen und auf der rechten Seite der passenden Datenbankspalte zurordnen. Wie man das genau umgesetzt hat weiß ich jetzt nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz