![]() |
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:
KLAPPT NICHT:
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'); )
SQL-Code:
[edit=Admin]SQL-Statements in Tags [ sql] und [ /sql] gesteckt. Bitte künftig selber machen. Danke. ;-) Mfg, Daniel[/edit]
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'); ) |
Re: Hat Trigger kein Before?
in SAP DB scheint das der Fall zu sein.
In ihrer Syntaxdefinition eines Triggers steht explizit nur "AFTER": Zitat:
|
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? |
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.
|
Re: Hat Trigger kein Before?
Was ist ADS?
|
Re: Hat Trigger kein Before?
Was ist an diesem Statement falsch?
Delphi-Quellcode:
Das krieg ich als meldung:
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; )
Delphi-Quellcode:
Wobei das ":new.ADRESS_ID" (Erste Zeile) rot geschrieben da steht. Geh mal davon aus da da der Fehler liegt
---- 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; ) |
Re: Hat Trigger kein Before?
Ist das jetzt wichtig ? Advanced Database Systems, eine Datenbank.
|
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 |
Re: Hat Trigger kein Before?
ich kann mir die DB leider nicht aussuchen
|
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:
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 ![]() Versteh' mich nicht falsch, aber erst suchen dann fragen. :roteyes: |
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 |
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] |
Re: Hat Trigger kein Before?
Doppelpost, damn :wall:
|
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