Kein Erfolg mit sql.addstrings

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Benutzeravatar
Swirl
Beiträge: 93
Registriert: Fr 7. Aug 2015, 14:05
OS, Lazarus, FPC: Win 10/11/ Mint 21.3 / Lazarus 30 / FPC 3.2.2
CPU-Target: x86_64, ARM Cort.-A7
Wohnort: Schwerte NRW

Kein Erfolg mit sql.addstrings

Beitrag von Swirl »

Hallo,

ich möchte eine 2-spaltige Tabelle mit (erst einmal Dummy-) Werten füllen:

****************************************************************************************************************

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  Liste: TStringList;
begin
  Liste := TStringList.create;
 
  for I := 1 to 30 do
    Liste.Add('INSERT INTO TablePos VALUES (123, 456);');
 
  SQLite3Connection1.DatabaseName := ExtractFilePath(Application.ExeName) + 'Kasse.sl3';
  SQLite3Connection1.Open;
  SQLQuery1.Close;
  // SQLQuery1.SQL.Text := 'INSERT INTO TablePos VALUES (123, 456);';
  SQLQuery1.SQL.AddStrings(Liste);
  SQLQuery1.ExecSQL;
  SQLTransaction1.Commit;
 
  Memo1.Lines := Liste;
 
  Liste.Free;
end;           

****************************************************************************************************************

Wenn ich mir hernach die Tabbelle anschaue, ist immer nur eine Zeile addiert worden,
es macht also keinen Unterschied, ob ich SQLQuery1.SQL.text := ... s.o., oder mit AddStrings
arbeite. Und da ich mir zuerst einmal selbst nicht traue, habe ich »Liste« auf ein Memo gelegt:
alle 30 Strings d'rin...

Gehe davon aus, dass ich da prinzipiell was falsch mache!?

Gruß,
Michael
Zuletzt geändert von Lori am Do 3. Mär 2016, 18:48, insgesamt 1-mal geändert.
Grund: Highlighter
=> Mint 21.3 “Virginia” - Win 10/11 - Lazarus 3.0 - FPC 3.2.2

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Kein Erfolg mit sql.addstrings

Beitrag von Michl »

Mit dem Semikolon

Code: Alles auswählen

INSERT INTO TablePos VALUES (123, 456);
ist die Anweisung abgeschlossen. Weitere Zeilen werden ignoriert.

Du kannst für die gepostete Anweisung ein TSQLScript nehmen und die Zeilen abarbeiten lassen oder die machst eine Schleife mit dem TSQLQuery, indem du in der Schleife jeweils das Query füllst und es ausführen lässt.

In deinem Fall, wenn du die einzutragenden Werte nicht ändern willst, wäre sogar eine Schleife á la

Code: Alles auswählen

for I := 1 to 30 do
  SQLQuery1.ExecSQL;
ausreichend.

PS.: mit einer aktiven Verbindung zur Datenbank und einem offenem SELECT, kannst du die gleiche Aufgabe mit Append, Post etc. lösen http://wiki.freepascal.org/SqlDBHowto/de#Daten_in_einer_Tabelle_.C3.A4ndern

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Benutzeravatar
Swirl
Beiträge: 93
Registriert: Fr 7. Aug 2015, 14:05
OS, Lazarus, FPC: Win 10/11/ Mint 21.3 / Lazarus 30 / FPC 3.2.2
CPU-Target: x86_64, ARM Cort.-A7
Wohnort: Schwerte NRW

sorry doppelpost

Beitrag von Swirl »

Sorry doppelpost, weiss leider nicht wie ich ihn löschen kann...
Zuletzt geändert von Swirl am Sa 5. Mär 2016, 13:34, insgesamt 1-mal geändert.
=> Mint 21.3 “Virginia” - Win 10/11 - Lazarus 3.0 - FPC 3.2.2

Benutzeravatar
Swirl
Beiträge: 93
Registriert: Fr 7. Aug 2015, 14:05
OS, Lazarus, FPC: Win 10/11/ Mint 21.3 / Lazarus 30 / FPC 3.2.2
CPU-Target: x86_64, ARM Cort.-A7
Wohnort: Schwerte NRW

Re: Kein Erfolg mit sql.addstrings

Beitrag von Swirl »

1. Besten Dank michl, mit 'ner Schleife läuft es.
2. Und das TSQLSript war wohl das, auf das ich hinauswollte. Werde ich mir also zusätzlich trotz ,,Schleifen-Lösung" mal anschauen.
Gruß,
Michael
aka Swirl
=> Mint 21.3 “Virginia” - Win 10/11 - Lazarus 3.0 - FPC 3.2.2

Antworten