![]() |
AW: Datenexport von Firebird nach Access über ZEOS
Vor dem Schreiben sollte aber ein Edit kommen bzw. Hier ein Append.
Allerdings ist es geschickter dieses über ein SQL-Skript mit Parametern zu lösen. Ein TDataSource mit der Firebird-Query verbinden. Diese DataSource bei der Access-Query als MasterSource definieren. jetzt kann man alle Felder aus der Firebird-Query in der Access-Query als Parameter ansprechen.
Code:
Jetzt die Firebird-Query öffnen und jeden Datensatz durchlaufen und bei jedem die Access-Query einmal ausführen lassen.
INSERT INTO ACC_Table (art, name) VALUES( :art, :name )
|
AW: Datenexport von Firebird nach Access über ZEOS
Ist es dann nicht performanter das SQL komplett aufzubauen und erst dann auszuführen?
Delphi-Quellcode:
COUNT=0
while not fbdb.eof do begin qryaccess.sql.add(INSERT INTO ACC_Table (art, name) VALUES( fbdb.fieldbyname('art').asinteger, fbdb.fieldbyname('name').asstring); fbdb.next; COUNT=COUNT+1; if COUNT = 1000 then begin COUNT=0; qryaccess.sql.add('commit;'); // so gehen nicht alle Datensätze verloren, wenn ein Fehler auftritt end; end; qryaccess.execSQL; |
AW: Datenexport von Firebird nach Access über ZEOS
Kommt immer auf das Framework und DBMS an.
Ein Prepared Statement in einer Transaction sollte sehr schnell sein. Muss das DBMS aber auch alles unterstützen und bei Access nun ja. |
AW: Datenexport von Firebird nach Access über ZEOS
Zitat:
Delphi-Quellcode:
Commit/Rollback kann man sich eigentlich bei Access sparen da diese Datenbank das nicht korrekt durchführt. Ein Programmabsturz führt (vor Jahren mit Acc2000 getestet) dazu das auch uncommited-Datensätze gespeichert wurden.
COUNT=0
qryaccess.sql.add(INSERT INTO ACC_Table (art, name) VALUES(:param1, param2); qryaccess.prepare; while not fbdb.eof do begin qryaccess.paramByName('param1').asInteger := fbdb.fieldbyname('art').asinteger; qryaccess.paramByName('param1').asString:= fbdb.fieldbyname('name').asstring; qryaccess.execute; fbdb.next; ... end; qryaccess.execSQL; |
AW: Datenexport von Firebird nach Access über ZEOS
Hallo,
danke für die Tipps. Ich habs nun über die Parameter realisiert. Läuft auch bei ca. 40 tausend Datensätzen noch in einem vetretbaren Zeitrahmen. |
AW: Datenexport von Firebird nach Access über ZEOS
Aus lauter Neugier:
Wie schnell ist denn "vertretbar"? Ich habe meinen Vorschlag (ohne ZEOS) gerade ausprobiert und mir Firebird installiert. Mit einer Testtabelle, die ich mit 65T Datensätzen befüllt hab, braucht der Export nach Access (bestehende mdb, aber neue Tabelle) ca 5 Sekunden. Alle Daten sind dabei lokal auf dem Laptop. |
AW: Datenexport von Firebird nach Access über ZEOS
Sowas wie für die BDE soll es laut Dr. Bob auch für ADO geben, dann
kann man tatsächlich Abfragen in eine SQL legen. Nur die Beispiele fehlen. Zitat:
|
AW: Datenexport von Firebird nach Access über ZEOS
Von Firebird zu Firebird-Database geht über eine Stored-Procedure:
Zitat:
|
AW: Datenexport von Firebird nach Access über ZEOS
In Post #17 vermisse ich den Bezug zum ADO im Zitat und Post #18 ist hier irgendwie OT
Oder ich verstehe nicht was du uns damit sagen möchtest |
AW: Datenexport von Firebird nach Access über ZEOS
ich vermute, dass
Zitat:
zu #17 Die Jet Engine macht ja genau das, was die BDE macht. Die Verdrahtung der Datenqellen erfolgt innerhalb einer ACCESS.MDB. Das Datentransferstatement, das dann von Delphi angestoßen werden kann, also sowas wie
Code:
benötigt nur den ADO Zugriff auf ACCESS.
insert into [heterogene tabelle A] (fields)
select fields from [heterogene tabelle B] where usw... Dabei hat man sich unter Delphi sämtliche FIELDBYNAME Aktionen, Parametrierung usw. gespart. Ich vermute, dass es auch schneller ist, daher auch meine Frage in Post #16. P.S.: Man sollte auch prima Joinen können, wenn man im Hinterkopf behält, dass es eine heterogene Abfrage ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:04 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