Hallo,
musste mal in eine
SQL-Serverdatenbank Unmengen von Daten reinschieben.
Zuerst also (ähnlich wie Du) die Textdatei zerbröselt, Parameter für das Insertstatement gefüllt und per ExecSQL satzweise Richtung Datenbank geschickt. War nicht wirklich schnell.
Dann bin ich hergegangen und habe die Insertstatement als Text erstellt, also Statements, die die Datenbank selbst verarbeiten kann. In der Form
Code:
Insert into tabelle (spalte1, spallte2, ..., Spalten) values ('Paula',4711,...,'0815');
Die kannst Du z. B. in den
SQL.Text einer ADOQuery packen und alle 100 oder 1000 Zeilen ein ExecSQL,
SQL.Text leeren und weiter.
Ungefähr sowas:
Delphi-Quellcode:
qry.SQL.Clear;
for i := 0 to slCSVDatei.Count - 1 do begin
qry.sql.Add(FunktionCreateInsert(slCSVDatei[i]));
if i mod 100 = 0 then begin // oder 1000, ausprobieren wie's am Schnellsten geht.
qry.sql.Add('Commit;'); // Prüfen, ob das erforderlich ist, weiß ich momentan nicht.
qry.ExecSQL;
qry.sql.Clear;
end;
end;
// Resteverarbeitung
qry.sql.Add('Commit;'); // Prüfen, ob das erforderlich ist, weiß ich momentan
qry.ExecSQL;
Alternative:
Ebenfalls Insertstatements erstellen und in Textdatei(en) speichern.
Diese Datei(en) per ISQL (Kommandozeilentool von
SQL-Server - zumindest früher mal, gibt's das noch?) in die Datenbank jagen.
Mit zweiter Methode habe ich vor Jahren mal einige Tage Laufzeit gegenüber der reinen Delphiversion eingespart.