AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datensätze exportieren und importieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datensätze exportieren und importieren

Ein Thema von stahli · begonnen am 1. Aug 2009 · letzter Beitrag vom 3. Aug 2009
Antwort Antwort
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#1

Datensätze exportieren und importieren

  Alt 1. Aug 2009, 11:00
Datenbank: FB • Version: 2.1 • Zugriff über: IBX
Hallo zusammen,

ich habe eine Firebird-Datenbank mit mehreren Tabellen.
Jede Tabelle hat eine eindeutige ID (ähnlich GUID), die jeden Datensatz "unverwechselbar" macht.

Das sieht etwa so aus:
Zitat:
...Mannschaften...
GUID, Pos, Name, Status

...Spieler...
MannschaftID, GUID, Pos, Name, Bild, Status
Nun möchte ich Daten in unterschiedlicher Form exportieren.
Z.B. Mannschaft "Halle" mit allen Spielern als "Halle.Man" und Mannschaft "Leipzig" mit allen Spielern als "Leipzig.Man".
Die Spielerbilder sollen mitgespeichert werden, nicht aber die Felder "Status".

Die Dateien sollen auch später wieder wieder in andere Projekte importierbar sein.
Sofern die GUID eines Datensatzes in einer Tabelle schon existiert sollte der Anwender gefragt werden, ob der alte oder neue Datensatz verwendet werden soll (sofern nicht beide identisch sind).

Ob die Daten binär oder in Textform exportiert werden ist mir eigentlich egal.

Wichtig ist mir jedoch eine Möglichkeit, jederzeit auf GLEICHHEIT zu prüfen, ob also im aktuellen Projekt die Mannschaftsdaten für "Halle" identisch sind mit der auf der Platte existierenden Datei "Halle.Man" (ob also ein aktueller Export zum gleichen Ergebnis führen würde).
Bei einer früheren Lösung ohne Datenbank habe ich eine Exportdatei "Compare.Man" erzeugt und dann mit der Datei "Halle.Man" verglichen.

Wie löst man diese Aufgabe am besten mit Firebird?
Ich nutze für die Erstellung der Datenbank IBExpert und als Komponenten IBX.

Danke
Stahli
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Datensätze exportieren und importieren

  Alt 1. Aug 2009, 11:04
Bei Verwendung von update or insert statt insert und einem entsprechenden matching sollte das kein Problem sein.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Datensätze exportieren und importieren

  Alt 1. Aug 2009, 14:12
"update or insert" kenne isch schon

Meine Fragen sind jedoch grundsätzlicher:

Wie realisiert man am besten den Export von Datensätzen aus zusammengehörigen Tabellen?
Geht das mit den IBX-Komponenten?

Beim Importieren wird mir "update or insert" nicht helfen, da ja der neue Datensatz sofort übernommen wird. Der User soll aber möglichst selbst entscheiden, welcher Datensatz im Projekt benutzt werden soll (der bereits im aktuellen Projekt enthalten ist oder ein potenziell importierbarer - z.B. ein Spielerdatensatz mit einem aktuelleren Bild).
Ich werde dazu einem Formular beide Varianten zur Auswahl stellen müssen. Na ja, das kann ich erst einmal zurück stellen.

Wichtiger ist die Frage, wie ich bestimmte Daten überhaupt aus der Datenbank herausschreibe und später wieder einlese.

Grundsätzlich würde ich mir eine Ini vorstellen (die Bilder könnten als Base64 gespeichert werden) - das ist aber sicher nicht die beste Lösung...
Der Vorteil wäre, dass das Exportformat recht flexibel ausbaubar wäre.
Das Projekt würde sich die einzelnenden Daten einfach nach Bedarf herauslesen - veraltete Daten (Felder) würden kein Problem darstellen.
Werden später einmal bestimmte Felder verändert, kann man auf diese Änderungen halt leicht reagieren.

Einen Stream zu nutzen halte ich nicht für sinnvoll, da auf spätere Formatänderungen kaum sinnvoll reagiert werden kann.

ClientDataSets (XML) wären auch eine Lösung, allerdings sollen alle exportierten Daten (aus mehreren Tabellen) in einer Exportdatei stehen.


Wie löst man so etwas am besten? Ich habe so etwas mit einer Datenbank noch nicht genutzt...


Stahli
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Datensätze exportieren und importieren

  Alt 3. Aug 2009, 12:21
Sofern keiner Einwände geltend macht bzw. eine bessere Lösung anbietet werde ich das jetzt mit einer Ini lösen.
Das soll dann etwas so aussehen:

Zitat:
[Allgemein]
Dateiformat=1

[Mannschaften]
1=2009073118591180602009073119122234751
2=2009073118591180602009073119122234752

[2009073118591180602009073119122234751]
{ClassName}=TMannschaft
Name=Halle
Spieler1=2009073118591180602009073119122234753
Spieler2=2009073118591180602009073119122234754

[2009073118591180602009073119122234752]
{ClassName}=TMannschaft
Name=Leipzig
Spieler1=2009073118591180602009073119122234755
Spieler2=2009073118591180602009073119122234756
Spieler3=2009073118591180602009073119122234757
Spieler4=2009073118591180602009073119122234758

[2009073118591180602009073119122234753]
{ClassName}=TSpieler
Name=Stahli
Bild=...Base64Daten...

...
Der Export und Import wird dann nicht direkt aus der Datenbank erfolgen sondern über die Komponenten, die das Projekt aus den Datenbankdaten erstellt hat. Die Komponenten kapseln dann Ihrerseits die bereits ausgelesenen Daten.

Die langen Schlüssel sind eindeutige ID´s, ähnlich GUID´s.

So können Dateien leicht auf Gleichheit geprüft werden und beim Importieren lassen sich Dateiformatänderungen leicht berücksichtigen, ohne dass diese zu Fehlern führen.
Wenn z.B. die Bilddaten künftig nicht mehr benötigt werden, ruft die Imortfunktion diese einfach nicht mehr ab. Dass sie noch in der Ini stehen, ist unproblematisch.
Das halte ich für einen großen Vorteil von Ini´s.

Dadurch, dass der Klassenname jedes Objektes mit in der Ini steht, lassen sich Objekte auch leicht rekonstruieren, wenn dabei unterschiedliche Klassen in einer Liste enthalten sein können.
Im obigen Beispiel ist z.B. eine zu importierende Mannschaft ihrerseits dafür verantwortlich ihre zugehörigen Spieler zu importieren usw.

Beim Import kann dann geprüft werden, ob gleichartige Datensätze schon existieren und dann gefragt werden, ob diese überschrieben werden sollen.

Eine ähnliche Lösung habe ich früher schon einmal umgesetzt.

Stahli
  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:08 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