![]() |
Datenbank: MariaDB • Version: 10.1.13 • Zugriff über: UniDAC
Batch insert - ValueCount unbekannt
Einfach mal abkopiert...
![]() Batch INSERT operation sample
Delphi-Quellcode:
So versuche ich aktuell ein insert auszuführen.
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; 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 |
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:
Bekommst Du sonst noch Fehlermeldungen?
Query1.Params.ArraySize := 1000;
Gruß |
AW: Batch insert - ValueCount unbekannt
Hier Dein ganzes Beispiel unter FireDAC und MS SQL Server:
Delphi-Quellcode:
Ganz böse Falle: Es darf nicht .AsInteger heißen, sondern es muss .AsIntegers heißen, und das bei allen .AsXXX Werten. :roll:
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; 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 09:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz