Einzelnen Beitrag anzeigen

rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Batch insert - ValueCount unbekannt

  Alt 1. Dez 2016, 13:53
Hier Dein ganzes Beispiel unter FireDAC und MS SQL Server:

Delphi-Quellcode:
var
  i: Integer;
begin
  // describe the SQL query
  Query1.SQL.Text := 'INSERT INTO Test_Table (F1, F2, F3, F4, F5) VALUES (:ID, :F_INTEGER, :F_FLOAT, :F_STRING, :F_DATE)';

  z := 0;
  // define the parameter types passed to the query :
  Query1.Params[0].DataType := ftInteger;
  Query1.Params[1].DataType := ftInteger;
  Query1.Params[2].DataType := ftFloat;
  Query1.Params[3].DataType := ftString;
  Query1.Params[3].Size := 30;
  Query1.Params[4].DataType := ftDateTime;

  // specify the array dimension:
  Query1.Params.ArraySize := 1000;

  // populate the array with parameter values:
  for i := 0 to 1000 - 1 do begin
    Query1.Params[0].AsIntegers[i] := i + 1;
    Query1.Params[1].AsIntegers[i] := i + 2000 + 1;
    Query1.Params[2].AsFloats[i] := (i + 1) / 12;
    Query1.Params[3].AsStrings[i] := 'Values ' + IntToStr(i + 1);
    Query1.Params[4].AsDateTimes[i] := Now;
  end;

  // insert 1000 rows into the BATCH_TEST table
  Query1.Execute(1000, 0);

  ShowMessage(IntToStr(Query1.RowsAffected));
end;
Ganz böse Falle: Es darf nicht .AsInteger heißen, sondern es muss .AsIntegers heißen, und das bei allen .AsXXX Werten.
Außerdem ist der [i] Parameter bei FireDAC hinter der .AsValue Definition und nicht hinter der .Params[x] Angabe.

Vielleicht nützt es Dir ja was ...

Gruß
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat