In einer Sekunde schaffe ich ca. 22500 Datensätze in eine
Paradox-Datenbank zu schreiben, aber nur ca. 70 Datensätze in eine
Access-Datenbank. Zum Test habe ich jeweils eine leere
Paradox- und
Access-Datenbank mit je 3 Feldern ID (AutoWert), SerNr (LongInteger) und SerTx (Text, Länge: 16). Wenn ich bei der
Access-Datenbank die ID von "AutoWert" auf "LongInteger" umstelle und manuell (siehe Auskommentierung) mit Werten versorge bringe ich es auf ca. 120 Datensätze pro Sekunde. Immer noch verdammt langsam ... Übrigens, das Ganze läuft auf einem Notebook mit Pentium 4 mobile mit 1,4 GHz und 256 MB
RAM.
Hier der Code:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
WriteFlag := False;
Timer1.Enabled := False;
end;
// Einfügen in Access-Tabelle
procedure TForm1.ButtonAccessClick(Sender: TObject);
var
ID,
SerSt,
SerNr: LongInt;
SerTx:
String;
begin
// Max ID ermitteln ----------------------------------------------------------
// ADOQuery1.Close;
// ADOQuery1.SQL.Text := 'Select max(ID) as maxID From Tabelle1';
// ADOQuery1.Open;
// ID := ADOQuery1.FieldByName('maxID').AsInteger;
// ---------------------------------------------------------------------------
ADODataSet1.Open;
ADODataSet1.Last;
SerSt := ADODataSet1.FieldByName('
SerNr').AsInteger;
SerNr := SerSt;
// ---------------------------------------------------------------------------
WriteFlag := True;
Timer1.Interval := StrToInt(Edit8.Text) * 1000;
Timer1.Enabled := True;
// Daten einfügen ------------------------------------------------------------
ADODataSet1.Edit;
while (WriteFlag)
do
begin
// inc(ID);
inc(SerNr);
SerTx := '
XYZ' + RightStr('
00000000' + IntToStr(SerNr), 8);
ADODataSet1.Append;
// ADODataSet1.FieldByName('ID').AsInteger := ID;
ADODataSet1.FieldByName('
SerNr').AsInteger := SerNr;
ADODataSet1.FieldByName('
SerTx').AsString := SerTx;
Application.ProcessMessages;
end;
ADODataSet1.Post;
// ---------------------------------------------------------------------------
ShowMessage(IntToStr(SerNr - SerSt) + '
Datensätze eingefügt');
end;
// Einfügen in Paradox-Tabelle
procedure TForm1.ButtonParadoxClick(Sender: TObject);
var
SerSt,
SerNr: LongInt;
SerTx:
String;
begin
Table1.Open;
Table1.Last;
SerSt := Table1.FieldByName('
SerNr').AsInteger;
SerNr := SerSt;
// ---------------------------------------------------------------------------
WriteFlag := True;
Timer1.Interval := StrToInt(Edit9.Text) * 1000;
Timer1.Enabled := True;
// ---------------------------------------------------------------------------
Table1.Edit;
while (WriteFlag)
do
begin
inc(SerNr);
SerTx := '
XYZ' + RightStr('
00000000' + IntToStr(SerNr), 8);
Table1.Append;
Table1.FieldByName('
SerNr').AsInteger := SerNr;
Table1.FieldByName('
SerTx').AsString := SerTx;
Application.ProcessMessages;
end;
Table1.Post;
// ---------------------------------------------------------------------------
ShowMessage(IntToStr(SerNr - SerSt) + '
Datensätze eingefügt');
end;
Weis jemand wie ich das schneller hin kriege?
Vielen Dank.