Einzelnen Beitrag anzeigen

Franzelchen

Registriert seit: 22. Mär 2007
82 Beiträge
 
#6

AW: Insert Optimierung

  Alt 2. Mär 2012, 18:25
Das ZQuery1.SQL.Text := 'INSERT INTO TestTabelle (Wert1, Wert2) VALUES(:v1, :v2)'; reicht doch einmal aus, also vor der Schleife.
?? Wenn ich das vor die Schleife setze, wie wird dann die Parameterliste befü...

richtig!! egal wo INSERT steht,ausgeführt wird es mit execsql.

Delphi-Quellcode:
ZQuery1.SQL.Text := 'INSERT INTO TestTabelle (Wert1, Wert2) VALUES (:v0, :v1), (:v2, :v3), (:v4, :v5), (:v6, :v7);';
...
with ZQuery1.Params do begin
  ParamValues[0] := SG1.Cells[0, i];
  ParamValues[1] := SG1.Cells[1, i];
  ParamValues[2] := SG1.Cells[0, i + 1];
  ParamValues[3] := SG1.Cells[1, i + 1];
  ParamValues[4] := SG1.Cells[0, i + 2];
  ParamValues[5] := SG1.Cells[1, i + 2];
  ParamValues[6] := SG1.Cells[0, i + 3];
  ParamValues[7] := SG1.Cells[1, i + 3];
end;
ZQuery1.ExecSQL;
Genau das ist meines Verständnisses nach Bulk insert?
Packe eine Reihe Parameter in einen Bulk (=Paket) und überführe mit einem Insert das Paket.


Du schleppst 35.000 datensätze in einem Stringgrid mit Dir herum?
Wie wäre es dafür eine Stringlist oder eine List zu nehmen?
Ein Stringgrid ist ja eigentlich für die Datenanzeige zuständig, nicht für die Datenhaltung. Da sollte noch etwas für Dich drin sein.

Gruß
K-H
Die Textdatei ist Tabulator getrennt. Komma, Punkt, Semikolon usw. sind Schriftzeichen innerhalb des Textes.

Stringlist hätte ich auch gern genommen, aber meine Programmierkenntnisse reichen dafür nicht aus.

...ausserdem solltest Du den Query Text vor dem For setzen und mit Prepare der Datenbank die Chance geben dieses Statement vorzubereiten. In der Schleife setzt du nur noch die Parameter. Das bringt dann einiges an Speed.
Prepare ist bereits im Quelltext von Zeos eingebaut.
  Mit Zitat antworten Zitat