Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Tabellenstruktur schnell kopieren (https://www.delphipraxis.net/198505-tabellenstruktur-schnell-kopieren.html)

skoschke 8. Nov 2018 07:14

Datenbank: Foxpro SQlite • Version: ? • Zugriff über: Tadoquery, TFDQuery

Tabellenstruktur schnell kopieren
 
Hallo,

ich möchte eine uralte Foxpro-Datenbank nach SQLite kopieren.

Mein Ansatz war so etwa:
Delphi-Quellcode:

var
queryoriginal: Tadoquery;
queryexport: TFDQuery;

....
  for f := 0 to queryoriginal.Fields.Count - 1 do
  begin
    ft := queryoriginal.Fields[f].DataType;
    fn := queryoriginal.Fields[f].FieldName;
    if not Assigned(queryexport.FindField(fn)) then
    begin
      SQL := 'ALTER TABLE Termine ADD ' + fn;
      case ft of
        ftString:
          SQL := SQL + ' TEXT';
        ftSmallint:
          SQL := SQL + ' INTEGER';
        ftInteger:
          SQL := SQL + ' INTEGER';
.....
        ftByte:
          SQL := SQL + ' INTEGER';
        ftExtended:
          SQL := SQL + ' FLOAT';
        ftSingle:
          SQL := SQL + ' FLOAT';
      else
        showmessage('Feldtyp nicht implementiert !');
      end; // case
      queryexport.SQL.Text := SQL;
      queryexport.ExecSQL;
    end; // Assigned
  end; // Fieldcount
Und dann Datensatz für Datensatz, Feld für Feld kopieren...

Gibt es da was schnelleres, was die Struktur (oder gleich die gesamte DB) kopiert?

Ciao
Stefan

jobo 8. Nov 2018 07:36

AW: Tabellenstruktur schnell kopieren
 
Kommt drauf an, wie Du es einsetzen möchtest.
Einmalig?
Innherhalb eines Programms, Endanwender, Migration von alter Version auf neue?

Schnell ist meist die Verwendung von Textexport & -import en block. Wie immer muss auf Feldtypen und besonders DB spezifische Feldtypen bei der Konvertierung geachtet werden.

Was Foxpro da bietet (export), weiß ich aber nicht.

skoschke 8. Nov 2018 07:47

AW: Tabellenstruktur schnell kopieren
 
Der Einsatz ist "ständig", das bestehende Programm auf Windows PC arbeitet nach wie vor mit der dbf-Datei, für mobile Anwendungen soll zyklisch der aktuelle Inhalt der dbf nach SQLite exportiert werden...

Ciao
Stefan

jobo 8. Nov 2018 08:36

AW: Tabellenstruktur schnell kopieren
 
Der Ansatz oben im Code ist ja erstmal dynamisch(!) eine Tabellenstruktur zu definieren. Ist das notwendig? Ändert sich das Foxpro System häufig?
Wenn nicht, habe ich statische Ausgangsstruktur und statische Zielstruktur, letztere kann fertig in einer "leeren" sqlite Datei liegen, bereit für eine (Datei-)Kopie und frische Befüllung.

Schau mal für sqlite nach:
Code:
sqlite> .mode csv
-- und
sqlite>.import c:/sqlite/daten.csv importtabelle
Die entstehende Tabelle ist u.U. nicht hinreichend strukturiert, kann aber dann nach Bedarf innerhalb sqlite mit insert into finalezieltabelle (<fieldlist>) (select from importabelle) übernommen werden.

U.U. hilfreich ist dabei die Möglichkeit, dass sqlite eine Funktionalität hat, um verschiedene DB (sprich einzelne sqlite Dateien) untereinander bekannt zu machen und simultan zugreifbar (Stichwort "ATTACH DATABASE").

Wie Du aus foxpro einen flatfile csv export bekommst, weißt Du vielleicht selbst besser als ich.

Uwe Raabe 8. Nov 2018 08:44

AW: Tabellenstruktur schnell kopieren
 
Vielleicht kann CopyDataSet hier helfen: FireDAC.Comp.DataSet.TFDDataSet.CopyDataSet

skoschke 8. Nov 2018 13:21

AW: Tabellenstruktur schnell kopieren
 
Hallo,

das klingt ja sehr interessant!
Das werde ich mir mal genauer ansehen :-)

Ciao
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 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