![]() |
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:
Vielen Dank!
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; ciinderella :angel: |
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 |
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 |
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:
Viele Grüße
with IB_DSQL1 do
begin SQL.Text := Memo1.Text; Prepare; ExecSQL; end; |
Re: 2 sqlstr's gleichzeitig ausführen
Ein Query kann auch nur einen Befehl.
Für mehrere benötigst du ein ADOCommand |
Re: 2 sqlstr's gleichzeitig ausführen
@ onkelthom
für Firebird gibt es IBScript ich vermute das suchst du |
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) |
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,... |
Re: 2 sqlstr's gleichzeitig ausführen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 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-2025 by Thomas Breitkreuz