AGB  ·  Datenschutz  ·  Impressum  







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

Datenbank Export/Import

Ein Thema von hanspeter · begonnen am 28. Jan 2011 · letzter Beitrag vom 29. Jan 2011
Antwort Antwort
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#1

Datenbank Export/Import

  Alt 28. Jan 2011, 20:39
Datenbank: Firebird • Version: 2.5 • Zugriff über: Ibdac
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
  Mit Zitat antworten Zitat
jobo

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

AW: Datenbank Export/Import

  Alt 28. Jan 2011, 21:10
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Datenbank Export/Import

  Alt 28. Jan 2011, 21:58
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Datenbank Export/Import

  Alt 29. Jan 2011, 13:31
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.
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Datenbank Export/Import

  Alt 29. Jan 2011, 15:52
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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Datenbank Export/Import

  Alt 29. Jan 2011, 16:41
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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 12:19 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