AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Erweiterter SQL-Fehler
Thema durchsuchen
Ansicht
Themen-Optionen

Erweiterter SQL-Fehler

Ein Thema von Nalincah · begonnen am 8. Dez 2003 · letzter Beitrag vom 8. Dez 2003
Antwort Antwort
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#1

Erweiterter SQL-Fehler

  Alt 8. Dez 2003, 07:42
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??
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#2

Re: Erweiterter SQL-Fehler

  Alt 8. Dez 2003, 08:20
Hallo,

hast Du schon von der ADOConnection das Error-Objekt ausgewertet ?
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#3

Re: Erweiterter SQL-Fehler

  Alt 8. Dez 2003, 08:31
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....
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#4

Re: Erweiterter SQL-Fehler

  Alt 8. Dez 2003, 08:53
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
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: Erweiterter SQL-Fehler

  Alt 8. Dez 2003, 11:19
Das habe ich in deinem Thread "Hat Trigger kein before" geschrieben und es müsste auch hier zutreffen.

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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:18 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