AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamische zuweisung von Spalten

Ein Thema von freak4fun · begonnen am 10. Sep 2014 · letzter Beitrag vom 12. Sep 2014
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.115 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Dynamische zuweisung von Spalten

  Alt 10. Sep 2014, 09:49
Was ich nur noch nicht verstanden habe ist, ob es mehr werden. Soll deine Datenbank auf lange Sicht immer mehr Spalten bekommen können?
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

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

AW: Dynamische zuweisung von Spalten

  Alt 10. Sep 2014, 09:55
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.
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: Dynamische zuweisung von Spalten

  Alt 10. Sep 2014, 10:05
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.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

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

AW: Dynamische zuweisung von Spalten

  Alt 10. Sep 2014, 10:13
Danke Jumpy,

das hilft schon mal weiter.
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.
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Dynamische zuweisung von Spalten

  Alt 10. Sep 2014, 11:48
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.
Ralph
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Dynamische zuweisung von Spalten

  Alt 10. Sep 2014, 12:10
Also wie man da ohne KI auskommt, ist mir schleierhaft.

Solange alle Daten/Spalten, die durch irgendein CSV eintrudeln in der DB vorhanden sind, kann man alles zuordnen. Schon hier ist klar. In der DB wird dann die ein oder andere Spalte mal leer bleiben. Es ist offenbar ja nicht so vorgesehen, dass die Dateien sich nur durch andere Header -mit gleichem Inhalt- unterscheiden.

Spätestens, wenn dann ein Spalteninhalt gar nicht zuzuordnen ist, bleibt er entweder auf der Strecke oder man ermöglicht es, wirklich dynamisch, in der DB eine neue Spalte anzulegen.

Selbst ohne das tolle Feature, Spalten in der DB anlegen zu können, wird es in der Praxis so sein, dass der Anwender ab und zu 2 Augen zudrückt und die CSV Inhalte irgendwelchen DB Spalten zuordnet, die eigentlich nicht passen.
Erfahrungsgemäß sind schon CSV Dateien oft so gestaltet, dass es mindestens eine Vielzweckspalte gibt.

Eine DB, deren Inhalte nicht zu den Feldern passen kann man sich aber auch gleich sparen.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

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

AW: Dynamische zuweisung von Spalten

  Alt 10. Sep 2014, 15:10
So in etwa würde ich mir das vorstellen.
Angehängte Dateien
Dateityp: pdf Beispiel.pdf (136,6 KB, 34x aufgerufen)
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#8

AW: Dynamische zuweisung von Spalten

  Alt 10. Sep 2014, 16:06
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?

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.

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.

Ist das korrekt so?

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.

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.

Geändert von Dejan Vu (10. Sep 2014 um 16:10 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 Uhr.
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