AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Hat Trigger kein Before?
Thema durchsuchen
Ansicht
Themen-Optionen

Hat Trigger kein Before?

Ein Thema von Nalincah · begonnen am 5. Dez 2003 · letzter Beitrag vom 5. Dez 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Nalincah
Nalincah

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

Hat Trigger kein Before?

  Alt 5. Dez 2003, 08:39
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]
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: Hat Trigger kein Before?

  Alt 5. Dez 2003, 09:26
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>
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

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

Re: Hat Trigger kein Before?

  Alt 5. Dez 2003, 09:35
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?
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: Hat Trigger kein Before?

  Alt 5. Dez 2003, 10:36
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

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

Re: Hat Trigger kein Before?

  Alt 5. Dez 2003, 10:42
Was ist ADS?
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

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

Re: Hat Trigger kein Before?

  Alt 5. Dez 2003, 11:23
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
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: Hat Trigger kein Before?

  Alt 5. Dez 2003, 11:23
Ist das jetzt wichtig ? Advanced Database Systems, eine Datenbank.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
673 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Hat Trigger kein Before?

  Alt 5. Dez 2003, 11:35
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
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

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

Re: Hat Trigger kein Before?

  Alt 5. Dez 2003, 11:38
ich kann mir die DB leider nicht aussuchen
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#10

Re: Hat Trigger kein Before?

  Alt 5. Dez 2003, 11:43
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:08 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