
Zitat von
AndreT:
Ich muss Datensätze aus einem
CSV-File in eine
SQL-Server-Tabelle laden. Die Anzahl der Datensäte beträgt min 600000 Stück.
Sie kommen gesplittet in mehreren Files an. Diese Files kopiere ich automatisch der Reihe nach in eine "temp.csv" um. Auf dieser Datei habe ich eine
ODBC-Connection liegen.
Das würde ich nicht tun.
Durch die Treiberschicht von
ODBC hast du schon einen grossen Performanceverlust.
Ich würde jede Datei direkt in eine TStringList einlesen und dann Zeile für Zeile in die Einzelfelder zerlegen.
Siehe Code-Library:
http://www.delphipraxis.net/internal...ct.php?t=29791

Zitat von
AndreT:
somit habe ich unter Dephi eine ADODataConnection1, ein AdoTable1, und eine DataSource1. und ich habe eine ADODataConnection2, ein AdoTable2, und eine DataSource2 die mir die Verbindung zur
SQL-Server-Tabelle herstellt.
Ein ADOTable ist schlecht, da du ja nicht alle Datensätze vom Server abrufen, sondern nur einfügen willst.
Deshalb nimm eine ADOQuery mit den Eigenschaften:
Delphi-Quellcode:
CursorLocation := clUseClient;
SQL.Text := '
SELECT * FROM tabelle WHERE 0=1';
Hier noch ein Beispiel:
Delphi-Quellcode:
liste := TStringList.Create;
liste.LoadFromFile(fname);
// leere Zeilen entfernen
RemoveEmptyStrings(liste);
ProgressBarImport.Max := liste.Count - 1;
for n := 0 to liste.Count - 1 do
begin
ProgressBarImport.Position := n;
Application.ProcessMessages;
s := liste.Strings[n];
ADOQuery1.Append;
FBulkInsert.DataSet['KFZ'] := ExtractDelimited(1, s, delims);
FBulkInsert.DataSet['PLZ'] := ExtractDelimited(2, s, delims);
FBulkInsert.DataSet['EPL'] := ExtractDelimited(3, s, delims);
FBulkInsert.DataSet['TOUR'] := ExtractDelimited(4, s, delims);
FBulkInsert.DataSet['TIME_NORM'] := ExtractDelimited(5, s, delims);
FBulkInsert.DataSet['TIME_FRUEH'] := ExtractDelimited(6, s, delims);
ADOQuery1.Post;
end;