Delphi-PRAXiS
Seite 3 von 4     123 4      

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)

-=ZGD=- 11. Sep 2014 08:44

AW: Dynamische zuweisung von Spalten
 
Hi Chris,

ich entnehme mal dem ersten Post, dass die CSV jeweils einen Header hat, in welchem die Spalten stehen?

Die Reihenfolge ist in der Regel fest?
Es gibt zu keinem Zeitpunkt eine wirklich mustergültige Datei, die das Programm intern kennt?

Man könnte hier natürlich das Ganze etwas auf die Spitze treiben und für jede Spalte das Mapping speichern in einer Zuordnungstabelle.
Somit könntest du später einfach schauen: Wurde irgendwann die Spalte "Zuname" schon mal zugeordnet?

CSV-Datei
Code:
Vorname|Zuname|Anrede
Spaltenmapping
Code:
Vorname=firstname
Zuname=surname
Anrede=title
Neue CSV-Datei nach Monaten
Code:
Zuname|Anrede|Rufname
Ergibt dann ein neues Mapping
Code:
Zuname=surname
Anrede=title
Für Rufname gibt es noch kein Mapping, muss zugeordnet werden und ist somit beim nächsten Mal bekannt..
Das ist so die grobe Idee, die ich im Kopf hab.
Hierbei spielt die Struktur der CSV keine Rolle, einzig das Mapping ist entscheidend und du musst nur die Spalten anzeigen/zuordnen lassen, die unklar sind.

Edit: Grad gesehen, dass Dejan-vu so etwas Ähnliches vorgeschlagen hat. Need some coffee

Anmerkung
Ich würde das Hinzufügen/Entfernen der Spalten in der Datenbank nicht umsetzen.

Warum?
Weil das Programm damit dann auch umgehen müsste, sprich sich der Dynamik der Datenbank anpassen. Bei jedem Import könnte man theoretisch Felder entfernen lassen, die für die Funktionsweise der Anwendung relevant sind.

freak4fun 11. Sep 2014 10:10

AW: Dynamische zuweisung von Spalten
 
Zitat:

Zitat von -=ZGD=- (Beitrag 1272147)
CSV-Datei
Code:
Vorname|Zuname|Anrede
Spaltenmapping
Code:
Vorname=firstname
Zuname=surname
Anrede=title
Neue CSV-Datei nach Monaten
Code:
Zuname|Anrede|Rufname
Ergibt dann ein neues Mapping
Code:
Zuname=surname
Anrede=title

Richtig. Interessant wird es wenn ich meine beiden Beispiel CSV-Dateien aus der PDF nehme:

export_partial
Code:
alter = Alter
nam1 = Vorname
summe = Kontostand
name2 = Nachname
ort = Wohnort
Export (Neu)
Code:
alter = Alter
vor_name = Vorname
Anrede = Anrede
nach_name = Nachname
Beruf = Beruf
Neue Spalten mit gleicher Zuweisung. Was wenn "nach_name" nicht zugewiesen wird? Was wenn es später zugewiesen wird?
Wenn Anrede nicht angezeigt werden soll, aber der Benutzer sich entscheidet das erst später anzeigen zu lassen? Es dürfen keine Daten verloren gehen.

Zitat:

Zitat von -=ZGD=- (Beitrag 1272147)
Anmerkung
Ich würde das Hinzufügen/Entfernen der Spalten in der Datenbank nicht umsetzen.

Zitat:

Zitat von -=ZGD=- (Beitrag 1272147)
Warum?
Weil das Programm damit dann auch umgehen müsste, sprich sich der Dynamik der Datenbank anpassen. Bei jedem Import könnte man theoretisch Felder entfernen lassen, die für die Funktionsweise der Anwendung relevant sind.


Hinzufügen automatisch, Formatabhängig. Löschen ist nicht erlaubt, weder Programm noch Benutzer.

Ich bin nach wie vor offen für Vorschläge:
  1. Dynamisch Spaltenerstellung aus CSV
  2. Keine Daten löschen
  3. Immer alle Daten erfassen
  4. Möglichst einfach für den Benutzer

-=ZGD=- 11. Sep 2014 10:19

AW: Dynamische zuweisung von Spalten
 
Nunja, importieren tust du alles.

In deinen Beispielen ist links die Überschrift aus der CSV und rechts die Spalte in der Datenbank?

Beim Import gibt es kein "später".

Du prüfst vor dem Import ab, ob es für die CSV-Spalte eine Zuordnung zur DB gibt.
Ja: Super, nimm die
Nein: Dann entweder a) vorhanden Spalte entspricht dieser oder b) neue Spalte hinzufügen (evlt. den User fragen, welcher Inhalt dahinter steht [numerisch, Zeichenkette]).

Auf diese Weise bekommst du immer alle Daten mit, allerdings kann es natürlich sein, dass der Benutzer sagt: neue Spalte anlegen, obwohl es für diese Information bereits eine Spalte gibt..

Es wird keinen Weg geben, der zu 100 % sicher und sauber ist...

freak4fun 11. Sep 2014 10:28

AW: Dynamische zuweisung von Spalten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wer Interesse an der Anzeige hat:

Seite Balsamiq, Import im Anhang. ;)

Zitat:

Zitat von -=ZGD=- (Beitrag 1272181)
Nunja, importieren tust du alles.

Du prüfst vor dem Import ab, ob es für die CSV-Spalte eine Zuordnung zur DB gibt.
Ja: Super, nimm die
Nein: Dann entweder a) vorhanden Spalte entspricht dieser oder b) neue Spalte hinzufügen (evlt. den User fragen, welcher Inhalt dahinter steht [numerisch, Zeichenkette]).

Auf diese Weise bekommst du immer alle Daten mit, allerdings kann es natürlich sein, dass der Benutzer sagt: neue Spalte anlegen, obwohl es für diese Information bereits eine Spalte gibt..

Es wird keinen Weg geben, der zu 100 % sicher und sauber ist...

Richtig.

-=ZGD=- 11. Sep 2014 10:34

AW: Dynamische zuweisung von Spalten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, genau, im Prinzip kann man das so aufbauen.
Vielleicht würde ich es einfach kürzer machen und wie eine Art Wizard aufbauen.

Du zeigst pro Schritt immer nur eine CSV-Spalte an, die konfiguriert werden muss, sprich
  1. zugeordnet oder
  2. angelegt.
.

Was an der Sache blöd ist: Inkonsistenz der Daten, wie ich aus deinem Mockup erkenne, aber das wird schon so seine Richtigkeit haben.

taveuni 11. Sep 2014 13:04

AW: Dynamische zuweisung von Spalten
 
Ich hab jetzt nicht alles durchgelesen - aber der MSSqlServer (auch die kostenlose Express Version) eigene (eigentlich eher das Managementstudio) Import kann das schon. Erzeugt die Felder nach Namen wenn nicht vorhanden, wahlweise können Spaltennamen in Excel auf Spaltennamen in der Tabelle gemappt werden. Daten können angehängt oder vorher alte gelöscht werden usw. Wenn die Tabelle (Excel Sheetname) nicht existiert wird sogar die Tabelle angelegt.

-=ZGD=- 11. Sep 2014 13:05

AW: Dynamische zuweisung von Spalten
 
Zitat:

Zitat von taveuni (Beitrag 1272215)
Ich hab jetzt nicht alles durchgelesen - aber der MSSqlServer (auch die kostenlose Express Version) eigene (eigentlich eher das Managementstudio) Import kann das schon. Erzeugt die Felder nach Namen wenn nicht vorhanden, wahlweise können Spaltennamen in Excel auf Spaltennamen in der Tabelle gemappt werden. Daten können angehängt oder vorher alte gelöscht werden usw. Wenn die Tabelle (Excel Sheetname) nicht existiert wird sogar die Tabelle angelegt.


Joa, wobei Chris meinte: SQLite oder MySQL ;-)

Dejan Vu 11. Sep 2014 13:20

AW: Dynamische zuweisung von Spalten
 
Ja. Nur kann man beim Import-Wizard Quelle *und* Ziel frei wählen. D.h. wäre es eine Anforderung vom Vorgesetzten, wäre man ziemlich schnell fertig. Hier soll das aber ein Hobbyprojekt -idealerweise mit Lerneffekt- werden, also werden wir das hier mal hübsch alles selbst spezifizifizieren.

freak4fun 11. Sep 2014 13:34

AW: Dynamische zuweisung von Spalten
 
@-=ZGD=-: Der Wizard sieht gut aus. Diese Schritt für Schritt Idee gefällt mir.

Zitat:

Zitat von taveuni (Beitrag 1272215)
... der MSSqlServer ...

Muss man dafür was bezahlen, wenn man das zu einem Projekt beifügt?

Zitat:

Zitat von -=ZGD=- (Beitrag 1272217)
Joa, wobei Chris meinte: SQLite oder MySQL ;-)

:shock: Das ist nicht in Stein gemeißelt. SQL ist SQL.

Zitat:

Zitat von Dejan Vu (Beitrag 1272220)
Hier soll das aber ein Hobbyprojekt -idealerweise mit Lerneffekt- werden, also werden wir das hier mal hübsch alles selbst spezifizifizieren.

MSSQL nutzen hat auch einen Lerneffekt. :stupid: Ich schau mir das mal an, wie das Funktioniert.

Dejan Vu 11. Sep 2014 14:23

AW: Dynamische zuweisung von Spalten
 
MSSQL Express kosten zwar nichts, aber Ich glaube nicht, das Du das in einem gewerblich vertrieben Projekt als kostenpflichtigen Punkt mit verkaufen kannst. Aber die üblichen Tricks greifen da immer, also z.B. selber installieren lassen, oder im Rahmen der Gesamtinstallation mit installieren und darauf hinweisen, das dieser Punkt vom MS-SSMS Express erschlagen wird. Genaueres wirst Du in den Lizenzbestimmungen von Microsoft lesen.

In jedem Fall hast Du da alles, was Du brauchst, sogar Skripting, um dein Mapping noch besser zu machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:22 Uhr.
Seite 3 von 4     123 4      

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