Einzelnen Beitrag anzeigen

Generalissimo

Registriert seit: 28. Aug 2003
187 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: Generatorwerte setzen /Trigger deaktivieren

  Alt 11. Jan 2004, 16:11
Also mit Alter-Trigger wird das nichts werden, denke
ich. Das alte Änderungsspeicher-Problem mit IB/FB.
Nach einer Weile ist die Max-Anzahl von Änderungen erreicht
und du müsstest ein Backup-Restore durchführen.

Probier mal den Gedanken:

1. Generator für Boolean-Wert

SQL-Code:
CREATE GENERATOR GEN_TRIGGER_STATUS;
SET GENERATOR GEN_TRIGGER_STATUS TO 0;
2. Schreibe die Prozeduren:

SQL-Code:
CREATE PROCEDURE SET_GENERATOR_TO_MAX_ID
AS
DECLARE VARIABLE MAXID INTEGER;
BEGIN
SELECT MAX(ID) FROM your_table
INTO :MAXID;
SET GENERATOR GEN_DS_ID TO :MAXID;
END
SQL-Code:
Create Procedure SET_TRIGGER_STATUS ( STATUS:SMALLINT)
AS
BEGIN
 If (:Status) = 1 then Set Generator GEN_TRIGGER_STATUS TO 1
 If (:Status) = 0 then Set Generator GEN_TRIGGER_STATUS TO 0
END
3. Der Trigger sollte so aussehen

SQL-Code:
CREATE TRIGGER DS_BI0
ACTIVE BEFORE INSERT POSITION 0
AS
begin
 IF (GEN_ID(GEN_TRIGGER_STATUS,0)=1) THEN
 BEGIN
  IF (NEW.ID IS NULL) THEN
    EXECUTE PROCEDURE SET_GENERATOR_TO_MAX_ID;
    NEW.ID = GEN_ID (GEN_DS_ID,1);
 END
end
Durch GEN_ID(GEN_TRIGGER_STATUS,0) fragt der Trigger ab, welchen Stand der Generator hat.
Wenn er 1, also True ist, soll der Trigger ausgeführt werden.
In deinem Programm müsstest du nur noch die StoredProc in einem TIBStoredProc ausführen
und den Input-Parameter je nachdem ob der Trigger an oder aus sein soll 1 oder 0 übergeben.
  Mit Zitat antworten Zitat