Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Erweiterter SQL-Fehler (https://www.delphipraxis.net/12965-erweiterter-sql-fehler.html)

Nalincah 8. Dez 2003 07:42


Erweiterter SQL-Fehler
 
Hinweis: Ich will nicht wissen warum das Statement falsch ist, mein Problem liegt woanders!!

Wenn ich dieses Statement

Delphi-Quellcode:
CREATE TRIGGER AutoIncAdresse FOR admin.FORMFELDER AFTER INSERT EXECUTE
(
  IF new.RECHTE_ID IS NULL THEN
    SELECT MAX(RECHTE_ID) + 1 INTO :new.RECHTE_ID FROM admin.FORMFELDER
  ELSE
  IF new.RECHTE_ID <= 0 THEN
    SELECT MAX(RECHTE_ID) + 1 INTO :new.RECHTE_ID FROM admin.FORMFELDER
  ENDIF;
  IF new.RECHTE_ID IS NULL THEN
    :new.RECHTE_ID := 1;
  ENDIF
)
durch die TADOQuery jage krieg ich folgenden Fehler:

Code:
Ein Parameterobjekt ist nicht ordnungsgemäß definiert. Inkonsistente oder unvollständige Informationen wurden angegeben
Wenn ich das jedoch im SQL Studio ausführe krieg ich diesen Fehler:

Delphi-Quellcode:
---- Error -------------------------------
Auto Commit: On, SQL Mode: Internal, Isolation Level: Committed
Syntax error or access violation;-5015 POS(332) Missing keyword:WHILE,IF,EXECUTE,SELECT,RETURN,DECLARE,CASE,UPDATE,TR.
CREATE TRIGGER AutoIncAdresse FOR admin.FORMFELDER AFTER INSERT EXECUTE
(
  IF new.RECHTE_ID IS NULL THEN
    SELECT MAX(RECHTE_ID) + 1 INTO :new.RECHTE_ID FROM admin.FORMFELDER
  ELSE
  IF new.RECHTE_ID <= 0 THEN
    SELECT MAX(RECHTE_ID) + 1 INTO :new.RECHTE_ID FROM admin.FORMFELDER
  ENDIF;
  IF new.RECHTE_ID IS NULL THEN    // "new.RECHTE_ID" hat hier ne rote Schrift
    :new.RECHTE_ID := 1;
  ENDIF
)
Wie krieg ich es hin das ich diese Meldung auch in Delphi erhalte? Brauch ich dafür ne andere Query??

trifid 8. Dez 2003 08:20

Re: Erweiterter SQL-Fehler
 
Hallo,

hast Du schon von der ADOConnection das Error-Objekt ausgewertet ?

Nalincah 8. Dez 2003 08:31

Re: Erweiterter SQL-Fehler
 
Ja, habs versucht

Delphi-Quellcode:
for i := 0 to Con.Errors.Count - 1 do
begin
  MemoSQLError.Lines.Add(Con.Errors.Item[i])
end;
Geht natürlich nicht

Code:
[Fehler] uFrame.pas(336): Inkompatible Typen: 'String' und 'Error'
Leider weiß ich nicht genau wie ich das umwandeln soll....

trifid 8. Dez 2003 08:53

Re: Erweiterter SQL-Fehler
 
Hallo,

Delphi-Quellcode:
for i := 0 to Con.Errors.Count - 1 do
begin
  MemoSQLError.Lines.Add(Con.Errors.Item[i].Source);
  MemoSQLError.Lines.Add(IntToStr (Con.Errors.Item[i].NativeError));
end;
steht alles in der ADO210.CHM

weitere property zum Error-Objekt
Description
HelpContext
HelpFile
Number

Robert_G 8. Dez 2003 11:19

Re: Erweiterter SQL-Fehler
 
Das habe ich in deinem Thread "Hat Trigger kein before" geschrieben und es müsste auch hier zutreffen.

Zitat:

Zitat von GeorgeWNewbie
Der Link,den ich dir gestern gepostet habe enthät alle Infos, die du zum erstellen von Triggern benötigst.
Die schreiben dort z.B:
Zitat:
:NEW and :OLD must always be used with a colon in SQL statements that are used in triggers and that belong to the routine_sql_statements
(For example: UPDATE reisen.raum SET hnr = :NEW.hnr WHERE hnr = :OLD.hnr).

NEW and OLD must always be used without a colon in SQL statements that are used in triggers and that do not belong to the routine_sql_statements
(For example: IF NEW.hnr <> OLD.hnr).



Du musst also die New/Old Records in SQL-Statements als Bind-Variable (:New/:Old) verwenden.
Im Trigger-code darfst du keinen ":" davor schreiben.



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