AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Batch insert - ValueCount unbekannt
Thema durchsuchen
Ansicht
Themen-Optionen

Batch insert - ValueCount unbekannt

Ein Thema von user0815 · begonnen am 1. Dez 2016 · letzter Beitrag vom 1. Dez 2016
Antwort Antwort
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#1

Batch insert - ValueCount unbekannt

  Alt 1. Dez 2016, 11:42
Datenbank: MariaDB • Version: 10.1.13 • Zugriff über: UniDAC
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

Geändert von user0815 ( 1. Dez 2016 um 11:46 Uhr) Grund: Artikeldatum überlesen
  Mit Zitat antworten Zitat
rokli

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

AW: Batch insert - ValueCount unbekannt

  Alt 1. Dez 2016, 12:50
Hallo User0815,

ich kenne weder die Maria DB noch verwende ich UniDAC.

Mit FireDAC muss so heißen

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

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
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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz