Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Datenbank Export/Import (https://www.delphipraxis.net/157903-datenbank-export-import.html)

hanspeter 28. Jan 2011 20:39

Datenbank: Firebird • Version: 2.5 • Zugriff über: Ibdac

Datenbank Export/Import
 
Hallo,

in einem Projekt habe ich eine Firebird - Systemdatenbank. In dieser werden neben allen Programmeinstellungen, Archivdaten u.s.w. auch alle
Reports gespeichert.
Ein Reportdatensatz enthält neben der eigentlichen Reportdefinition (Fastreport) noch eine Reihe zusätzlicher Angaben wie z.B. Master/Detail SQL Abfrage für den Report, Variablendeklarationen u.s.w.
Im Moment sind etwa 200 Reportvorlagen vorhanden.
Ich möchte nun einzelne Reports exportieren/importieren.
Was ich suche ist eine Ideee oder fertige Komponente, die auch was kosten darf, um einen einzelnen Datensatz als File abzuspeichern.
CSV oder XML ist nicht so einfach, da der Datensatz mehrere Blob enthält. Wobei die Reportvorlage für Fastreport selbst eine komplexe XML Definition mit Binärfeldern ist.
Hat wer eine Idee oder kennt eine fertige Komponente um ein Dataset in eine File speichern zu können?

Für einen Tip dankbar.

Gruß
Peter

jobo 28. Jan 2011 21:10

AW: Datenbank Export/Import
 
Ich habe so etwas mal für Oracle gemacht.
Die Idee ist, LOB Felder zu encoden und dann bspw, als Hex-Folge in Textdateien zu schreiben. In meinem Fall direkt als Insert Statement.
Genauer, "normale" Felder bzw. Datensätze als Liste von Insert-Statements, (Belegte) Blob-Felder als separate Dateien mit Decode & Update-Anweisung. Dazu muss dann allerdings der Primär-Schlüssel bekannt sein.
Eine Vorlage zum BLOB-Encoding (Oracle) hab ich damals in einem Blog gefunden.

Sir Rufo 28. Jan 2011 21:58

AW: Datenbank Export/Import
 
Bau dir doch eine Klasse (z.B. TComponent) die alle Informationen zu dem Bericht aufnehmen kann.
Datensatz aus der DB in die Instanz schreiben und dann selbige als Stream abspeichern.

sx2008 29. Jan 2011 13:31

AW: Datenbank Export/Import
 
Grundsätzlich brauchst du ein hierarchisches Datenformat wie XML, JSON oder auch ein Tagged-File-Format.
Ein Format wie CSV ist nicht geeignet um die Daten aus mehreren Tabellen zu speichern.
BLOB-Felder zu speichern ist kein Problem wenn man sie mit Base64 kodiert.
Bei XML ist das das übliche Verfahren um binäre Daten oder auch ganze XML-Dateien zu verpacken.

Der Vorschlag von jobo würde auch funktionieren; dieser Weg hat aber eine grosse Abhängigkeit zur Datenbank.

hanspeter 29. Jan 2011 15:52

AW: Datenbank Export/Import
 
Ich will nur einen Datensatz in einer Datei speichern. Dieser wird aus Datenbank A ausgegeben und in Datenbank B eingelesen.
Es geht im speziellen Fall um Reportvorlagen mit zusätzlichen Parametern.
Sollen drei Reports updatet werden, verwende ich halt drei Dateien.
Auf Basis von TComponent selbst streamen werde ich mal versuchen oder gibt es da schon was fertiges?
Aber auch das Generieren eines Insert/Updatestatements ist kein Problem, da die Primarykeys bekannt und gleich sind.
Was ich auch überlegt hatte ist eine "Transportdatenbank". die zu exportierenden Sätze werden in eine eigene Tabelle gespeichert und von dort beim Kunden wieder gelesen.
Was ich als Komponente suche wäre eine Lösung ein Dataset als externe Datei z.B. XML zu speichern.

Also
ExportFile.FieldbyName('Vorlage') := Firebird.Fieldbyname('Vorlage');

Exportfile.SavetoFile('Report21');

Nachdem 'Report21' beim Kunden importiert wurde, hat diese Datei keine weitere Verwendung.
Vorstellbar wäre auch ein Format ähnlich einer Ini-File:

ReportNR=21
SQL= 'SELECT NR,ART from QUELLE' u.s.w.

Am Ende der Datei dann Vorlage=
und hier die Orginalausgabe des Reportgenerators.

Bisher habe ich mit einem Backup/Restore Tool für die Reportdatenbank gearbeitet.
Man konnte auswählen, welche Reports übernommen werden sollen.
Das hatte jedoch zur Folge, das sich Anwender eigene Reportäderungen in anderen Reports überschreiben konnten, wenn sie die zu kopierenden Reports nicht selektiv auswählten.

Gruß Peter

Sir Rufo 29. Jan 2011 16:41

AW: Datenbank Export/Import
 
Das Speichern/Laden von einem DataSet in eine XML-Datei geht mit den ADO-Komponenten (Format pfXML)
http://docwiki.embarcadero.com/VCL/d...Set.SaveToFile
oder auch mit UniDAC von Devart

Andere DB-Komponentensammlungen werden das aber bestimmt auch unterstützen.

Trotz allem würde ich den Im-/Export über ein entsprechendes Objekt regeln.
Mittels RTTI kann man da sehr einfach den Austausch zwischen der DB und der Sicherungsdatei regeln.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 Uhr.

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