Moin zusammen,
Ich lesen ca. 1000 Datensätze mit folgendem Code ein, welcher ca. 15 Sekunden dauert. Ich verwende TADOConnection und TADODataSet.
Delphi-Quellcode:
...
if FileExists(path_canban) = True then
begin
AssignFile(F, path_canban);
Reset(F);
while not EoF(F) do
begin
Readln(F, zeile);
sl_zeile := Split(zeile,';', True); // ist nicht das Problem
Inc(counter);
try
DSData.Close;
DSData.CommandText := 'Select * from fullload_data';
DSData.Open;
DSData.Append;
DSData.FieldByName('lname').AsString := sl_zeile[0];
DSData.FieldByName('sachnr').AsString := sl_zeile[1];
DSData.FieldByName('benennung').AsString := sl_zeile[2];
DSData.FieldByName('zeichnungsnr').AsString := sl_zeile[3];
DSData.FieldByName('lagerbestand').AsString := sl_zeile[4];
DSData.FieldByName('liefermenge').AsString := sl_zeile[5];
DSData.FieldByName('mindestbestand').AsString := sl_zeile[6];
DSData.FieldByName('abrufnr').AsString := sl_zeile[7];
DSData.FieldByName('tag').AsString := sl_zeile[8];
DSData.FieldByName('abrufnr_zusatz').AsString := sl_zeile[9];
DSData.FieldByName('aindex').AsString := sl_zeile[10];
DSData.FieldByName('lieferort').AsString := sl_zeile[11];
DSData.FieldByName('position').AsString := sl_zeile[12];
DSData.FieldByName('kenn_es').AsString := ''; //sl_zeile[13];
DSData.FieldByName('lnr').AsString := ''; //sl_zeile[14];
DSData.Post;
DSData.Close;
Except
//
end;
end;
tbtn_fullload_import.Enabled := False;
end;
...
In der Zukunft können sich die Daten verdoppeln. So, dass das Program 30 Sekunden braucht. Das ist nicht wirklich schlimm aber kann man es noch optimieren?
Ich habe es schon mit BULK INSERT versucht. Geht verdammt schnell. Leider gibt es ein paar Sachen, die dann nicht mehr funktionieren, die ich wärend des Insert benötige.
Über TADOQuery könnte man es auch machen aber ich weiß nicht, ob der Unterschied so groß ist. Bei TADODataSet habe ich auch schon die Eigenschaft Prepare=True gesetzt. Passiert aber nichts.
Meine Idee wäre, alle Daten mit Append in die Datenbank schreiben und zum Schluss ein Post. Leider habe ich dann nur einen Datensatz in der
DB.
Habe das Forum schon einwenig durchsucht, was mich nicht weitergebracht hat.
Vielleicht sieht ja einer meinen Quellcode und weiß sofort, wo man was optimieren kann. Verständnisfehler sind nicht ausgeschlossen.
Vielen Dank im Voraus.
Sven