![]() |
SQL-Statement wird 2 mal ausgeführt
Wenn ich dieses SQL-Statement ausführe:
SQL-Code:
Das ganze führe ich mit meinem Programm so aus:
CREATE TRIGGER InsertIntoEinheiten FOR ADRESSEN AFTER INSERT EXECUTE
( INSERT INTO admin.EINHEITEN (Einheit_ID) VALUES ('test'); )
Delphi-Quellcode:
Wenn ich das Statement ausführe, wird der Trigger auch angelegt aber krieg trotzdem folgende Fehlermeldung:
procedure TDB_Frame.ButtonSQLExecuteClick(Sender: TObject);
begin DS.DataSet := Query; Query.SQL.Text := MemoSQL.Text; try Query.ExecSQL; Con.GetTableNames(ListBoxTable.Items); Query.Active := false; Query.Active := true; LabelSQLResult.Font.Color := clBlue; LabelQueryRecordCount.Caption := IntToStr(Query.RecordCount); LabelSQLResult.Caption := 'SQL-Statement erfolgreich ausgeführt'; except On e : exception do begin LabelSQLResult.Font.Color := clRed; LabelSQLResult.Caption := 'Fehler beim ausführen des Statements'; MemoSQLError.Text := e.Message; PageControlSQL.ActivePageIndex := 1; end; end; end;
Delphi-Quellcode:
Der führt das Statement irgendwie doppelt aus. Wenn ich
[SAP AG][SQLOD32 DLL][SAP DB]General error;-6006 POS(16) Duplicate name
SQL-Code:
ausführe, sagt der:
Drop Trigger InsertIntoEinheiten of ADRESSEN
Delphi-Quellcode:
Weil er den Trigger halt 2 mal löschen will.
[SAP AG][SQLOD32 DLL][SAP DB]General error;-4019 POS(14) Unknown trigger name:INSERTINTOEINHEITEN
Liegt das irgendwie an meinem Quellcode?? [edit=Admin]SQL-Code in die SQL-Tags eingefügt. Mfg, Daniel[/edit] |
Re: SQL-Statement wird 2 mal ausgeführt
ka, was in Deinem SQL-Statement des Memo's wirklich steht, aber folgendes kann dazu führen, daß es zweimal ausgeführt wird :
Zitat:
Query.Active führt ihn aber auch aus, wenn es True gesetzt wird. Hoffe, das hilft Dir weiter. BTW. Warum den Trigger per Programm setzen ? Das macht man einmal bei DB-Definition und dann läßt man ihn in Ruhe, bis man ihn ändern muß. Zum anderen beschreibst Du ein Feld "Einheiten_ID" mit einem String. ID werden normalerweise aber mit Zahlen gemacht. Check das doch mal ;-) LG, MRN |
Re: SQL-Statement wird 2 mal ausgeführt
Danke. Bin im gleichen Moment auch drauf gekommen.
Das ganze ist teil eines DB-Programms. Mit dem kann man DBs öffnen und SQL-Statements ausführen. und dann kann man halt auch selber trigger einrichten. Bin grad am üben. Das Feld ist VarChar(10) weil die Einheit_ID z.b. auch "AB3UZ" sein kann |
Re: SQL-Statement wird 2 mal ausgeführt
Jetzt hab ich leider noch ein Problem:
Delphi-Quellcode:
Wenn ich das so mache, dann kracht der bei
procedure TDB_Frame.ButtonSQLExecuteClick(Sender: TObject);
begin DS.DataSet := Query; Query.SQL.Text := MemoSQL.Text; try Query.ExecSQL; // Query.Active := false; // Query.Active := true; LabelSQLResult.Font.Color := clBlue; LabelQueryRecordCount.Caption := IntToStr(Query.RecordCount); LabelSQLResult.Caption := 'SQL-Statement erfolgreich ausgeführt'; except On e : exception do begin LabelSQLResult.Font.Color := clRed; LabelSQLResult.Caption := 'Fehler beim ausführen des Statements'; MemoSQLError.Text := e.Message; PageControlSQL.ActivePageIndex := 1; end; end; end;
Delphi-Quellcode:
Weil die Query nicht aktiv ist. Das soll der nur machen ein Select-Statement aufgerufen wird.
LabelQueryRecordCount.Caption := IntToStr(Query.RecordCount);
Hab mir das erst so überlegt:
Delphi-Quellcode:
Das geht aber nicht, da ich ja das
if Query.Active = true then
LabelQueryRecordCount.Caption := IntToStr(Query.RecordCount);
Delphi-Quellcode:
ausgeklammert habe.
Query.Active := true
Reinmachen kann ich ja nicht. Und ohne ExecSQL gehts auch nicht. Wie krieg ich das hin? |
Re: SQL-Statement wird 2 mal ausgeführt
Das Problem liegt an der Art des Statements. Es gibt welche mit und welche ohne ResultSet. Einen Trigger zu erstellen hat kein ResultSet, deswegen gibt es auch keine RecordCount. Mach doch einfach 'ne Abfrage, ob Pos('SELECT', ADOQry.SQL.Lines[0]) > 0 ergibt ;-)
Ich kenn nun leider die komp ned wirklich und weiß ned, was die Variablen sonst noch für Möglichkeiten haben, rauszubekommen, was für ein Statement es war. ADOQry.EoF wäre auch ein Ansatz. LG, MRN |
Re: SQL-Statement wird 2 mal ausgeführt
kann ich denn davon ausgehen das ein Select-Statement immer alleine ausgeführt wird???
|
Re: SQL-Statement wird 2 mal ausgeführt
nicht wirklich ;-)
Aber die Antwort ist trotzdem "Ja" es gibt auch die Möglichkeit, ein SELECT-Statement auf eine Stored Procedure zu machen, die liefert dann allerdings auch ein ResultSet... |
Re: SQL-Statement wird 2 mal ausgeführt
|
Re: SQL-Statement wird 2 mal ausgeführt
sorry, wird nix nützen, da bei es bei mir keine ADO-Komps gibt
und hab auch hier ein wenig zu tun auf Arbeit, krieg ja ned umsonst ein Haufen geld ;-) |
Re: SQL-Statement wird 2 mal ausgeführt
Ist ja nicht das Projekt, sondern die exe
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 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