Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi 2 sqlstr's gleichzeitig ausführen (https://www.delphipraxis.net/150708-2-sqlstrs-gleichzeitig-ausfuehren.html)

ciinderella 24. Apr 2010 16:54

Datenbank: MySQL • Zugriff über: ADO

2 sqlstr's gleichzeitig ausführen
 
Hey.

Ich möchte gerne 2 sqlstr's gleichzeitig ausführen.
Weiß jedoch nicht, wie das geht. Im Anhang mein Beispiel.

SQL-Code:
  Form2.ADOQuery1.Close;
  Form2.ADOQuery1.SQL.Clear;
 
  sqlstr1 := 'INSERT INTO Zubehoer (Zubehoerbezeichnung) VALUES ("' + ed_zubehoer.text + '")';
 
  sqlstr2 := 'INSERT INTO Kombinationen (K_ZID, K_AID, K_Preis) VALUES (' + inttostr(ZubehoerIndex) + ', ' + inttostr(AutoIndex) +   ', ' + ed_Preis.Text + ')';
 
  Form2.ADOQuery1.SQL.Add(..?..);
  Form2.ADOQuery1.ExecSQL;
Vielen Dank!

ciinderella :angel:

rollstuhlfahrer 24. Apr 2010 17:35

Re: 2 sqlstr's gleichzeitig ausführen
 
Du kannst nicht 2 SQL-Aktionen gleichzeitig ausführen lassen. Das DBMS macht daraus ja auch zwei nacheinander ausgeführte Aktionen. Du kannst aber mittels "LOCK TABLES" die entsprechenden Tabellen vor Veränderungen von außen schützen, sodass es für "außenstehende" so aussieht, als würdest du 2 Aktionen gleichzeitig ausführen. Dabei aber bitte nicht vergessen mit "UNLOCK TABLES" die Sperre wieder aufzuheben, denn die Sperre bleibt solange aktiv, solange dein Programm die Verbindung zur datenbank aufrecht erhält.

Bernhard

hoika 27. Apr 2010 06:57

Re: 2 sqlstr's gleichzeitig ausführen
 
Hallo,
Delphi-Quellcode:
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
 
  sqlstr1 := 'INSERT INTO Zubehoer (Zubehoerbezeichnung) VALUES ("' + ed_zubehoer.text + '")';
 
  sqlstr2 := 'INSERT INTO Kombinationen (K_ZID, K_AID, K_Preis) VALUES (' + inttostr(ZubehoerIndex) + ', ' + inttostr(AutoIndex) +   ', ' + ed_Preis.Text + ')';

  ADOQuery1.SQL.Add(sqlstr1);
  ADOQuery1.ExecSQL;

  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add(sqlstr2);
  ADOQuery1.ExecSQL;

Heiko

onkelthom 10. Mai 2010 14:15

Re: 2 sqlstr's gleichzeitig ausführen
 
Hallo zusammen,

ich möchte so etwas ähnliches machen, allerdings habe ich mein SQL nicht im Source liegen, sondern in einer Datei ausgelagert.
Auf diese Weise möchte ich über meinen Client DB-Updates steuern können.
So weit funktioniert das auch, nur sobald ich mehr als 1 Statement rein packe, will er nicht mehr und meckert den ersten Befehl nach dem ersten ; an. (create, alter, drop,... kennt er dann alles nicht mehr)
Ein Commit hat mir da auch noch nicht weiter geholfen.

hat jemand ne Idee, wie ich n Statements abschießen kann ?

Firebird 2.1 / verwendete Komponente TIB_DSQL

Delphi-Quellcode:
  with IB_DSQL1 do
  begin
    SQL.Text := Memo1.Text;
    Prepare;
    ExecSQL;
  end;
Viele Grüße

mkinzler 10. Mai 2010 14:25

Re: 2 sqlstr's gleichzeitig ausführen
 
Ein Query kann auch nur einen Befehl.

Für mehrere benötigst du ein ADOCommand

AlBo55 10. Mai 2010 14:55

Re: 2 sqlstr's gleichzeitig ausführen
 
@ onkelthom
für Firebird gibt es IBScript ich vermute das suchst du

Sir Rufo 10. Mai 2010 15:18

Re: 2 sqlstr's gleichzeitig ausführen
 
Mal so allgemein gefragt:

Für mich sieht das so aus, als wird hier nach Transaktionen gesucht.
Weil dann verhalten sich die SQL-Statements nach außen wie ein Statement.
(konsistenter Datenbestand)

shmia 10. Mai 2010 16:03

Re: 2 sqlstr's gleichzeitig ausführen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn man eine Liste mit SQL-Befehlen hat, die alle durch einen Strichpunkt abgeschlossen werden,
dann muss man die Liste zunächst in einzelne Befehle zerlegen und dann auch einzeln mit ExecSQL() ausführen.

Ich hänge mal eine Klasse an, die das Zerlegen in der SQL-Befehle vornimmt.
Die SQL-Befehle dürfen natürlich keine Parameter haben und SELECT ist auch nicht sinnvoll.
Sinnvolle SQL-Befehlen wären INSERT INTO, UPDATE, DELETE, CREATE TABLE, ALTER TABLE, DROP TABLE,...

s.h.a.r.k 10. Mai 2010 16:13

Re: 2 sqlstr's gleichzeitig ausführen
 
Zitat:

Zitat von Sir Rufo
Mal so allgemein gefragt:

Für mich sieht das so aus, als wird hier nach Transaktionen gesucht.
Weil dann verhalten sich die SQL-Statements nach außen wie ein Statement.
(konsistenter Datenbestand)

right :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 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