AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ADO Command mit mehreren Inserts
Thema durchsuchen
Ansicht
Themen-Optionen

ADO Command mit mehreren Inserts

Ein Thema von Tomektor · begonnen am 12. Jan 2006 · letzter Beitrag vom 15. Jan 2006
 
Tomektor

Registriert seit: 16. Jul 2003
Ort: Hannover
15 Beiträge
 
#1

ADO Command mit mehreren Inserts

  Alt 12. Jan 2006, 10:45
Datenbank: MySQL • Version: 4.0.16 • Zugriff über: ADO
Hallo!

Habe folgende Aufgabe:
Bestimmte Datenpunkte (bis zu 10000 Stück!) müssen über Monate bis Jahre hinaus in einer Datenbank archiviert werden.
Die Zustandsänderung wird jede Sekunde archiviert.
Für jeden Datenpunkt wird eine Tabelle angelegt: dp1 bis dp9999. Die Tabelle besitzt nur zwei Spalten (Timestamp und Wert).
Natürlich muss ich bei der Anzahl von Tabellen unmöglich sein ADOCommando.Execute in einer Schlaufe laufen zu lassen (aus Spaß getestet - bei 250 Executes pro Sekunde ist Schicht im Schacht)
Die Insert-Anweisungen sollten deshalb gesammelt werden und in Paketen über ein ADOCommando.Execute gesendet werden. (wie in einer Dump-Datei).
Und hier taucht schon ein Problem auf:

Dies funktioniert problemlos:
Delphi-Quellcode:
commando := 'INSERT INTO dp1 VALUES (' + unixstamp + ', ' + wert + ');';
ADOCommando.CommandText := commando;
ADOCommando.Execute;
Das Sammeln von Werten für einen Datenpunkt in einer Insert-Anweisung funktioniert ebenfalls:
Delphi-Quellcode:
commando := 'INSERT INTO dp1 VALUES (1137061871, 0.568),(1137061872, 0.654),(1137061873, 0.564)';
ADOCommando.CommandText := commando;
ADOCommando.Execute;
Das funktioniert gar nicht:
Delphi-Quellcode:
commando :=
'INSERT INTO dp1 VALUES (1137061871, 0.5); ' +
'INSERT INTO dp2 VALUES (1137061871, 0.5); ' +
'INSERT INTO dp3 VALUES (1137061871, 0.5); ' +
'INSERT INTO dp4 VALUES (1137061871, 0.5); ' +
'INSERT INTO dp5 VALUES (1137061871, 0.5); ' +
'INSERT INTO dp6 VALUES (1137061871, 0.5); ' +
'INSERT INTO dp7 VALUES (1137061871, 0.5); ' +
'INSERT INTO dp8 VALUES (1137061871, 0.5); ' +
'INSERT INTO dp9 VALUES (1137061871, 0.5); ' +
'INSERT INTO dp10 VALUES (1137061871, 0.5); ';
ADOCommando.CommandText := commando;
ADOCommando.Execute;
Hat jemand eine Ahnung woran es liegen mag?!?
Es schaut so aus, also ob man in einen CommandText des ADOCommand nur eine Tabelle ansprechen könnte, aber das ist doch Quatsch.
Ich will doch reines SQL über die Schnittstelle schieben...
Gebe ich dieselbe SQL-Anweisung an die Datenbank über ein Tool wie phpMyAdmin ein, werden die Inserts ausgeführt...




Falls jemand es ausprobieren möchte hier der Code für die Tabellen erstellung (für 10 Datenpunkte):
Delphi-Quellcode:
   
procedure TForm1.Button1Click(Sender: TObject);
var
i: Word;
table: String;
begin
   for i := 1 to 10 do
   begin
     table := 'dp' + IntToStr(i);
     ADOCommandDelete.CommandText := 'DROP TABLE IF EXISTS ' + table;
     eSQLBefehl.Text := ADOCommandDelete.CommandText;
     ADOCommandDelete.Execute;
   end;

   for i := 1 to 10 do
   begin
     table := 'dp' + IntToStr(i);
     ADOCommandDelete.CommandText :=
     'CREATE TABLE ' + table + ' ( ' +
     'tstemp int(12) NOT NULL default 0, ' +
     'dpvalue float(16,15) NOT NULL default 0.000000000000000, ' +
     'PRIMARY KEY (tstemp) ' +
     ') TYPE=MyISAM;';
     ADOCommandDelete.Execute;
   end;

end;
Danke im Voraus für die Mühe!
  Mit Zitat antworten Zitat
 


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 22:46 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