Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi stored proceduren in triggern ausführen? (https://www.delphipraxis.net/33763-stored-proceduren-triggern-ausfuehren.html)

kiar 12. Nov 2004 10:21


stored proceduren in triggern ausführen?
 
hallo gemeinde,

folgender trigger feuert bei insert odr update. es klappt auch ganz gut.ich habe jetzt ein problem.die procedure padd_Mitarbeiter muss eine ID übergeben werden, welche ich in einer anderen procedure ermittle, die auch in ein andere tabelle eingreift und hier meckert ibexpert.

die frage ist nun, ob es sinnvoll ist die proceduren zu verschachteln, oder anders gefragt geht das überhaupt?

DB :Firebird 1.5
zugriff : ibexpert


SQL-Code:
CREATE TRIGGER TAB_ANWESENHEIT_BIU1 FOR TAB_ANWESENHEIT
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
DECLARE VARIABLE IMITARBEITERID INTEGER;

BEGIN

  IF (NEW.ANWESENHEIT_ID IS NULL) THEN
  BEGIN
      NEW.ANWESENHEIT_ID = GEN_ID(GEN_TAB_ANWESENHEIT_ID,1);
      EXECUTE PROCEDURE PADD_MITARBEITER(2);
  END
  ELSE
  BEGIN
   UPDATE TAB_ANWESENHEIT SET
   OUT_TIME = CURRENT_TIME;
  END
END
raik

kachel81 12. Nov 2004 13:38

Re: stored proceduren in triggern ausführen?
 
Das geht auf jeden Fall, poste einfach mal wobei er meckert.

kiar 12. Nov 2004 13:44

Re: stored proceduren in triggern ausführen?
 
hallo,

ich habe die procedure PAdd_Mitarbeiter, welche die id erwartet .
diese id ermittle ich in einer anderen procedure, so das das statement wie folgt aussieht
SQL-Code:
execute procedure pAdd_mitarbeiter(execute procedure Psearch_mitid(vnummer))
wobei die procedure Psearch_mitid auf eine andere tabelle zugreift,
wenn ich die parameter für die erste procedure hard codiere funktioniert das .

raik

kachel81 12. Nov 2004 13:52

Re: stored proceduren in triggern ausführen?
 
So geht das nicht.

Leg Dir eine Variable an, hol Dir den Rückgabewert der ersten Methode und rufe die zweite damit auf:

Delphi-Quellcode:
CREATE TRIGGER TAB_ANWESENHEIT_BIU1 FOR TAB_ANWESENHEIT
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
DECLARE VARIABLE IMITARBEITERID INTEGER;
DECLARE VARIABLE MyID INTEGER
BEGIN

  IF (NEW.ANWESENHEIT_ID IS NULL) THEN
  BEGIN
      NEW.ANWESENHEIT_ID = GEN_ID(GEN_TAB_ANWESENHEIT_ID,1);
     
      MyID = null;
      select
        p.wert
      from
        Psearch_mitid(vnummer) p
      into
        :MyID

      if (:MyID is not null) then
        EXECUTE PROCEDURE PADD_MITARBEITER(:MyID);
  END
  ELSE
  BEGIN
   UPDATE TAB_ANWESENHEIT SET
   OUT_TIME = CURRENT_TIME;
  END
END
Das müßtest Du noch anpassen, aber so wirds funktionieren.

kiar 12. Nov 2004 14:12

Re: stored proceduren in triggern ausführen?
 
danke,

werde ich probieren.

raik

kiar 12. Nov 2004 14:23

Re: stored proceduren in triggern ausführen?
 
hallo kachel81,

es sieht schon vielversprechender aus, er meckert aber trotzdem noch und sagt, das die spalte vnummer keinen bezug auf die referenztabelle hat. ist ja auch richtig, da diese procedure auf eine andere tabelle zugreift.

raik

kachel81 12. Nov 2004 14:57

Re: stored proceduren in triggern ausführen?
 
Genau, die vnummer mußt du dann entsprechend auch noch über ein Select ermitteln.

kiar 12. Nov 2004 15:05

Re: stored proceduren in triggern ausführen?
 
so habe ich,

jetzt werde ich mal testen ob das so geht.

gleich noch mal ne frage hinterher :shock: ich weis das man das nicht machen sollte, aber die mod schauen bestimmt nicht hier rein :duck:

wie kann ich sp eigentlich debuggen?

danke

kachel81 12. Nov 2004 15:17

Re: stored proceduren in triggern ausführen?
 
Ich wußte garnicht, daß man das nicht machen sollte, naja...

Also ich verwende das Tool IBExpert, da ist ein Debugger für SP enthalten, mit Haltepunkten und einer Liste aller verwendeten Parameter mit Werten usw.

Ich schreibe mir aber bei der Fehlersuche meistens die Werte die mich interessieren in eine Dummy-Tabelle raus.

kiar 12. Nov 2004 15:22

Re: stored proceduren in triggern ausführen?
 
ich nutze auch ibexpert , aber nur die freie version da ist das feature nicht eingeschaltet. naja trotzdem danke werde auch alles in eine tabelle rausschreiben.

naja für einen hobby programmierer ist das auch ausreichend :mrgreen:

raik


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