Einzelnen Beitrag anzeigen

Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#14

AW: Dynamische zuweisung von Spalten

  Alt 10. Sep 2014, 19:08
Darf ich noch einmal meckern? Das ist kein 'Wizard' oder 'Assistent', sondern ein ziemlich überladenes Formular. Oder ist das gar nicht als Formular gedacht, sondern als kompakte Darstellung deiner Idee?
Eine kompakte Darstellung.

"export_partial" ist die erste CSV-Datei mit Format1
"Export (Neu)" ist die zweite CSV-Datei mit Format2
Die beiden Dateiimport-Felder stellen den aufeinander folgenden Import der Dateien dar.
Erstellen/ Bearbeiten stellt die Möglichkeit zur Benennung der Spalten dar.
Die Benutzeranzeige stellt das Menu zur Konfiguration der Datensatzansicht dar.
Die Datennsicht ist die Benutzeransicht der Datenbank.

Mal sehen, vielleicht verstehe ich es ja:
1. Eine CSV-Datei besteht aus Zeilen und Spalten (C1...Cm)
2. Du hast eine Tabelle in einer Datenbank mit allen Spalten (S1...Sn).
3. Für jede Datei möchtest Du ein Mapping, sodaß Ci => Sj abgebildet wird.
4. Dein Programm weiß einfach so, welchem Feld in der Benutzeransicht die Tabellenspalte 'Nachname' zugewiesen ist.
1. ja
2. ja- am Anfang 0 spalten, dann die aus er den CSV-Dateien
3. ja - Spalten aus der neuen CSV werden auf bestehende Spalten gemapt. Wenn das nicht passiert wird die spalte erstellt.
4. Das soll eigentlich der Benutzer machen. Wenn das CSV-Format bekannt ist (Vorlage) muss der Benutzer nichts machen.
(Problem hierbei: Der Benutzer weist aus Desinteresse oder Unwissenheit irgendwas zu)

Aufgaben:
I. Die Menge von Spalten, also das Layout der DB-Tabelle (S1...Sn) soll veränderbar sein.
II. Beim Import einer CSV-Datei lädst Du ein vordefiniertes Mapping und importierst die Datei.
I. ja
II. Bekanntes Format -> einfacher Import, unbekanntes Format -> Mapping + Spaltenerstellung

Ist das korrekt so?
Du bist nah dran.

Die Handhabung ist mehr als holperig, denn um eine Übersicht über das Mapping zu bekommen, musst Du auf die einzelne CSV-Spalte klicken, um dann im Dropdown das aktuell eingestellte Mapping zu sehen. Zeige das lieber als Grid mit drei Spalten an (Nr, CSV-Spalte, DB-Spalte). Entweder du blendest dann in der dritten Spalte deine Dropdownliste ein (dann kann man das Mapping direkt im Grid machen), oder Du machst das -wie bisher- über ein separates Dropdown.
Im <Idealfall bekommt der Benutzer die ganze Konfiguration nur einmal beim ersten Import zu Gesicht.
Alle Spalten werden für die DB neu erstellt, der Benutzer definiert die Anzeigenamen und die Vorlage wird gespeichert. Beim zweiten Import (gleiches Format). Werden die neuen Daten ohne Änderungen hinzugefügt.
Für die Pflege der Zieltabelle würde ich einfaches DDL nehmen, also:
Spalte hinzufügen: "ALTER TABLE ZielTabelle ADD NeueSpalte <Typ>"
Spalte wegnehmen: "ALTER TABLE ZielTabelle DROP AlteSpalte"
usw.
Das Mapping erschlägst Du mit einer Stringliste 'CSV-Spalte=DB-Spalte'. Der Dateiname der Stringliste ist der Name der Vorlage.
Die DB-Tabellendefinition und die Datentypen liest Du per Metainformation aus der Datenbank.
Genau.

Ich überlege ob das auch einfacher geht. Ich habe da freie Hand. Die einzige Vorgabe sind die verschiedenen CSV-Formate.

PS: Danke für die Antworten!
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat