AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Datenexport von Firebird nach Access über ZEOS
Thema durchsuchen
Ansicht
Themen-Optionen

Datenexport von Firebird nach Access über ZEOS

Ein Thema von waldforest · begonnen am 20. Nov 2010 · letzter Beitrag vom 14. Feb 2011
Antwort Antwort
jobo

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

AW: Datenexport von Firebird nach Access über ZEOS

  Alt 13. Feb 2011, 10:57
Ich hab auch kein Firebird und kein Zeos, aber ich stelle mir das so vor:

Du nimmst eine Access.mdb (mglw. gleich die Ziel DB),
dort kommt per ODBC eine Tabellenverknüpfung zur Firebird Quelltabelle rein.

Dann baust Du direkt in Access (mit Hilfe des Assistenten) die Insert Abfrage, nimmst Dir die SQL Anweisung und verwendest die dann in Delphi.

In Delphi brauchst Du für diesen Schritt nur eine ADOConnection via Access/ Jet Engine zu der Access DB von oben und eine ADOQuery für das SQL Statement, kein Firebirdzugriff, das soll die Jet Engine machen.

Könnte funktionieren.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#2

AW: Datenexport von Firebird nach Access über ZEOS

  Alt 13. Feb 2011, 11:27
Für die BDE gibt es eine Möglichkeit mehrere BDE-Aliases zu definieren und die dann direkt in der SQL anzusprechen. Das Durchreichen der Werte ist damit nicht erforderich. Laut Hilfe gibt es auch sowas für ADO, aber ich finde im Moment kein Beispiel dafür. Die Stichwörter zum Suchen sind "supports heterogeneous queries". Bei mir ist jetzt allerdings "Computer ShutDown".

Grüße in die Runde
Martin Schaefer
  Mit Zitat antworten Zitat
Piethan

Registriert seit: 2. Jun 2008
Ort: Köln
43 Beiträge
 
Delphi XE Architect
 
#3

AW: Datenexport von Firebird nach Access über ZEOS

  Alt 13. Feb 2011, 11:49
Hi,

ich würde hier wie folgt vorgehen. Die Source auslesen und zeilenweise an deine AccessDB weiterreichen,
praktischer weise solltest du auch die Daten prüfen z.B. mit RegExpr und nur die importieren welche richtig
sind.

Delphi-Quellcode:
while not fbDataSet1.Eof do
begin
  try
    dtsAccess.fieldByName('NAME').asstring:=fbDataset1.FieldByName('NAME').AsString;
    dtsAccess.Post;
    fbDataset1.Next;
  finally
    
  end;
end;
LG
Dirk
  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
 
#4

AW: Datenexport von Firebird nach Access über ZEOS

  Alt 13. Feb 2011, 12:01
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:
INSERT INTO ACC_Table (art, name) VALUES( :art, :name )
Jetzt die Firebird-Query öffnen und jeden Datensatz durchlaufen und bei jedem die Access-Query einmal ausführen lassen.
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
Piethan

Registriert seit: 2. Jun 2008
Ort: Köln
43 Beiträge
 
Delphi XE Architect
 
#5

AW: Datenexport von Firebird nach Access über ZEOS

  Alt 13. Feb 2011, 12:32
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;
  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: Datenexport von Firebird nach Access über ZEOS

  Alt 13. Feb 2011, 12:36
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.
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 Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.222 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Datenexport von Firebird nach Access über ZEOS

  Alt 13. Feb 2011, 12:39
Ist es dann nicht performanter das SQL komplett aufzubauen und erst dann auszuführen?
Nein. Schneller ist es eine parametrisierte Abfrage zu verwenden die man prepared.

Delphi-Quellcode:
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;
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: Datenexport von Firebird nach Access über ZEOS

  Alt 13. Feb 2011, 12:44
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.
mfg wf
  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 02:28 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