Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Hat Trigger kein Before? (https://www.delphipraxis.net/12849-hat-trigger-kein-before.html)

Nalincah 5. Dez 2003 08:39


Hat Trigger kein Before?
 
Kann es sein das die Trigger in der SAP DB 7.4 nur AFTER kenn und nicht BEFORE?

KLAPPT:

SQL-Code:
CREATE TRIGGER AUTOINCADR FOR admin.ADRESSEN AFTER INSERT EXECUTE
(
  SELECT ADRESS_ID FROM ADMIN.ADRESSEN ORDER BY ADRESS_ID ASC;
  INSERT INTO ADMIN.ADRESSEN (ADRESS_ID) VALUES ('test');
)
KLAPPT NICHT:

SQL-Code:
CREATE TRIGGER AUTOINCADR FOR admin.ADRESSEN BEFORE INSERT EXECUTE
(
  SELECT ADRESS_ID FROM ADMIN.ADRESSEN ORDER BY ADRESS_ID ASC;
  INSERT INTO ADMIN.ADRESSEN (ADRESS_ID) VALUES ('test');
)
[edit=Admin]SQL-Statements in Tags [ sql] und [ /sql] gesteckt. Bitte künftig selber machen. Danke. ;-) Mfg, Daniel[/edit]

Robert_G 5. Dez 2003 09:26

Re: Hat Trigger kein Before?
 
in SAP DB scheint das der Fall zu sein.
In ihrer Syntaxdefinition eines Triggers steht explizit nur "AFTER":
Zitat:

Syntax

<create_trigger_statement> ::= CREATE TRIGGER <trigger_name> FOR <table_name>
AFTER <trigger_event,..> EXECUTE (<routine>) [WHENEVER <search_condition> ]

<trigger_event> :: INSERT | UPDATE [(<column_list>)] | DELETE
<column_list> ::= <column_name> | <column_list>,<column_name>

Nalincah 5. Dez 2003 09:35

Re: Hat Trigger kein Before?
 
Verdammt.
AFTER INSERT wird erst ausgeführt nachdem der Datensatz gespeichert ist?

Dann hätt ich ein Problem: Will nämlich das, wenn man einen neuen Datensatz anlegt, der Trigger automatisch das feld ADRESS_ID (PrimayKey, NotNull) mit dem nächsten fortlaufenden Wert füllt. Das Problem ist, solange da nichts drin steht kann ich nicht speichern, und solange ich nicht speichern kann, steht da nichts drin (Der Trigger wird ja erst nach dem Speichern ausgeführt). Seh ich das richtig?

Hansa 5. Dez 2003 10:36

Re: Hat Trigger kein Before?
 
Die Argumente für Interbase werden (zumindest für mich) immer offensichtlicher. Da habe ich 6 Trigger zur Auswahl. Jeweils INSERT, UPDATE und DELETE für AFTER und BEFORE. Ähnlich siehts mit Views und SP aus. Soweit ich weiß, hat MS-SQL nur drei Trigger. Und SAP baut darauf auf. ADS z.B. hat zumindest in der freien Version nicht mal Transaktionen.

Nalincah 5. Dez 2003 10:42

Re: Hat Trigger kein Before?
 
Was ist ADS?

Nalincah 5. Dez 2003 11:23

Re: Hat Trigger kein Before?
 
Was ist an diesem Statement falsch?

Delphi-Quellcode:
CREATE TRIGGER AutoIncAdresse FOR admin.ADRESSEN AFTER INSERT EXECUTE
(
    IF :new.ADRESS_ID IS NULL THEN
        SELECT MAX(ADRESS_ID) + 1 INTO :new.ADRESS_ID FROM admin.ADRESSEN
    ELSE
    IF :new.ADRESS_ID <= 0 THEN
        SELECT MAX(ADRESS_ID) + 1 INTO :new.ADRESS_ID FROM admin.ADRESSEN
    ENDif;
    IF :new.ADRESS_ID IS NULL THEN
      :new.ADRESS_ID := 1;
    ENDIF;
)
Das krieg ich als meldung:

Delphi-Quellcode:
---- Error -------------------------------
Auto Commit: On, SQL Mode: Internal, Isolation Level: Committed
General error;-7045 POS(80) Parameter spec not allowed.
CREATE TRIGGER AutoIncAdresse FOR admin.ADRESSEN AFTER INSERT EXECUTE
(
    IF :new.ADRESS_ID IS NULL THEN
        SELECT MAX(ADRESS_ID) + 1 INTO :new.ADRESS_ID FROM admin.ADRESSEN
    ELSE
    IF :new.ADRESS_ID <= 0 THEN
        SELECT MAX(ADRESS_ID) + 1 INTO :new.ADRESS_ID FROM admin.ADRESSEN
    ENDif;
    IF :new.ADRESS_ID IS NULL THEN
      :new.ADRESS_ID := 1;
    ENDIF;
)
Wobei das ":new.ADRESS_ID" (Erste Zeile) rot geschrieben da steht. Geh mal davon aus da da der Fehler liegt

Hansa 5. Dez 2003 11:23

Re: Hat Trigger kein Before?
 
Ist das jetzt wichtig ? Advanced Database Systems, eine Datenbank.

MyRealName 5. Dez 2003 11:35

Re: Hat Trigger kein Before?
 
Ich hab mich auch für Interbase (respektive FireBird) entschieden, weil sie

a) 6 Trigger haben
und
b) UDF's unterstützen, die leicht zu programmieren sind.

und ich bin seit über 4 Jahren SEHR glücklich damit !

LG, MRN

Nalincah 5. Dez 2003 11:38

Re: Hat Trigger kein Before?
 
ich kann mir die DB leider nicht aussuchen

Robert_G 5. Dez 2003 11:43

Re: Hat Trigger kein Before?
 
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.

p.s.: bis jetzt konnte ich fast jede deiner Fragen beantworten indem ich 2 Minuten auf dieser Seite gesucht habe.
Und ich habe keinen blassen Schimmer von SAP DB!
Mach dich dort mal schlau, außerdem hat dir MyRealName in deinem "SQL Trigger Tut" -thread diesen Link gepostet SAP DB Forum.

Versteh' mich nicht falsch, aber erst suchen dann fragen. :roteyes:

Nalincah 5. Dez 2003 11:48

Re: Hat Trigger kein Before?
 
Danke erstmal das du dich für mich aufopferst
aber ich hab irgendwie nie so das Talent zum suchen, ich find nicht, und wenn doch dann interpretier ich es falsch, und denke ich brauch das nicht. Bin irgendwie zu ungeduldig

MyRealName 5. Dez 2003 12:06

Re: Hat Trigger kein Before?
 
Also ohne Dich angreifen zu wollen oder so (hab ja selbst mal angefangen und hatte von nix 'ne Ahnung, allerdings gab es damals auch ned das inet wie jetzt und so hatte ich auch keine Möglichkeit, solche Fragen zu stellen)...

Ungeduld ist eine der schlechtesten Eigenschaften, die Du als Programmierer haben kannst. Viel von dem, was Du mit der Zeit lernen wirst, stammt nicht aus Büchern oder Foren, sondern aus einer Programmier-Methode namens "Try and Error". Will sagen, Du wirst ständig Fehler machen beim programmieren (mach ich heut noch nach 16 Jahren !). Und als Tipp kann ich Dir dazu nur eins geben : Statt ins DP-Forum zu gehen und zu fragen, setz Dich erstmal in aller Ruhe hin mit dem Debugger und 'nem Pott Kaffee (vielleicht auch ne Kippe und 'ne Pizza, wie jeder gute Programmierer ;-)) und such den Fehler, finde heraus, was schief läuft, meist sind es eh nur kleine Logik-Fehler. Und wenn Du mit etwas nicht klarkommst (wie gestern mit den Triggern), dann google doch einfach mal, mich hat der link gestern ein paar sek gekostet (Suchworte "SAPDB und Trigger"). Und bevor Du in einem Forum Fragen dazu stellst, lies Dir Grundlagenwissen zum Thema an, so daß Du auch verstehst, was man man Dir erklärt.

Ich weiß, daß es einfacher ist, mit einem Problem ins Forum zu gehen und andere finden heraus, warum es ned funktioniert und sagen es Dir. Aber dadurch wirst Du nicht unbedingt verstehen, warum es nicht auf Deine Art funktioniert, sondern nur eine Lösung haben, die an dieser Stelle wohl geht, aber bei der nächsten leicht abgewandelten Form des Fehlers stehst Du wieder vorm gleichen Problem und Du gehst wieder ins Forum. Denn ohne Verstehen funktioniert das Abstrahieren nicht.

Das soll jetzt nicht als Moralpredig verstanden werden, es ist ein reiner Erfahrungsbericht (wir alle haben ja mal angefangen). Ich helf Dir weiterhin gern, aber leider hilft es Dir nicht wirklich, ein guter Programmierer zu werden, sondern eben nur in dem Augenblick an diesem Problem. Denk mal drüber nach ;-)

LG, MRN

[edit] die kleine Tippfehlerteufel-Sau hat sich eingeschlichen :gruebel: [/edit]

MyRealName 5. Dez 2003 12:07

Re: Hat Trigger kein Before?
 
Doppelpost, damn :wall:

Nalincah 5. Dez 2003 12:16

Re: Hat Trigger kein Before?
 
Da stimm ich dir vollkommen zu. Ich glaub das liegt heut einfach daran das 1. Freitag ist 2. ich gestern in nen Geb reingefeiert hab und 3. ich heute mal überhaupt kein Bock hab was zu machen (Keine Sorge, das ist die Ausnahme, nicht die Regel), und dementsprechend fertig bin. Leider trink ich kein Kaffee, lieber RedBull (aber so teuer), und meine Lunge sieht von den ganzen Kippen bestimmt schon aus wie ne Rosine und Pizzen haben wir hier leider nicht

Trotzdem danke das du mir hier'n bisschen hilfst!!!! :dp:


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