Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Batch insert - ValueCount unbekannt (https://www.delphipraxis.net/191033-batch-insert-valuecount-unbekannt.html)

user0815 1. Dez 2016 11:42

Datenbank: MariaDB • Version: 10.1.13 • Zugriff über: UniDAC

Batch insert - ValueCount unbekannt
 
Einfach mal abkopiert... http://blog.devart.com/using-batch-o...omponents.html

Batch INSERT operation sample

Delphi-Quellcode:
var
  i: Integer;
begin
  // describe the SQL query
  Query1.SQL.Text := 'INSERT INTO BATCH_TEST VALUES (:ID, :F_INTEGER, :F_FLOAT, :F_STRING, :F_DATE)';
 
  // 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[4].DataType := ftDateTime;
 
  // specify the array dimension:
  Query1.Params.ValueCount := 1000;
 
  // populate the array with parameter values:
  for i := 0 to Query1.Params.ValueCount - 1 do begin
    Query1.Params[0][i].AsInteger := i + 1;
    Query1.Params[1][i].AsInteger := i + 2000 + 1;
    Query1.Params[2][i].AsFloat := (i + 1) / 12;
    Query1.Params[3][i].AsString := 'Values ' + IntToStr(i + 1);
    Query1.Params[4][i].AsDateTime := Now;
  end;
 
  // insert 1000 rows into the BATCH_TEST table
  Query1.Execute(1000);
end;
So versuche ich aktuell ein insert auszuführen.
In die uses musste ich zusätzlich zu Uni die Data.DB aufnehmen für den DataType = ftInteger, ftFloat, ftString, ftDateTime

Aber diesen Query1.Params.ValueCount kennt Delphi nicht ?
Was muss ich machen damit es funktioniert ?


Sorry, glaube meine UniDAC Version ist zu alt, lese gerade der Artikel ist vom: September 11th, 2015

rokli 1. Dez 2016 12:50

AW: Batch insert - ValueCount unbekannt
 
Hallo User0815,

ich kenne weder die Maria DB noch verwende ich UniDAC.

Mit FireDAC muss so heißen

Delphi-Quellcode:
  Query1.Params.ArraySize := 1000;
Bekommst Du sonst noch Fehlermeldungen?

Gruß

rokli 1. Dez 2016 13:53

AW: Batch insert - ValueCount unbekannt
 
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. :roll:
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ß


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf