Ver Mensaje Individual
  #6  
Antiguo 07-08-2011
cdac901 cdac901 is offline
Miembro
 
Registrado: feb 2008
Posts: 12
Reputación: 0
cdac901 Va por buen camino
Desactivar trigger

Hola con respecto a los generator te recomiendo hacer un store procedure consultando el MAX del campo que afecta dicho generator y luego actualizarlo con el resultado que genero la consulta mas 1

con respecto al desativar los trigger seria algo asi, lo probe y funciono:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, IBDatabase, IBCustomDataSet;

type
  TForm1 = class(TForm)
    IBDataSet1: TIBDataSet;
    IBDataSet2: TIBDataSet;
    IBTransaction1: TIBTransaction;
    IBDatabase1: TIBDatabase;
    btActivar: TButton;
    IBTransaction2: TIBTransaction;
    btDesactivar: TButton;
    procedure btActivarClick(Sender: TObject);
    procedure btDesactivarClick(Sender: TObject);
  private
    { Private declarations }
    procedure ProcesarTrigger( lActivar: Boolean );
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.ProcesarTrigger( lActivar: Boolean );
var
   cActivar: string;
begin
   if lActivar then
      cActivar := ' ''ACTIVE ;'' '
   else
      cActivar := ' ''INACTIVE ; '' ';

   IBDataSet1.Close;
   IBDataSet1.SelectSQL.Text := 'SELECT ''ALTER TRIGGER '' || A.RDB$TRIGGER_NAME ||' + cActivar +
                                '  FROM RDB$TRIGGERS A ' +
                                ' WHERE (A.RDB$SYSTEM_FLAG = 0) ' +
                                '   AND (A.RDB$TRIGGER_INACTIVE = 0) ' +
                                '   AND (A.RDB$TRIGGER_TYPE IN (1, 17, 113, 25)) ';
   IBDataSet1.Open;

   if IBDataSet1.RecordCount > 0 then
      while not IBDataSet1.Eof do
         try
            IBDataSet2.Close;
            IBDataSet2.SelectSQL.Text := IBDataSet1.Fields[0].AsString;
            IBDataSet2.Prepare;
            IBDataSet2.ExecSQL;
            IBTransaction2.Commit;
         except
            on e: Exception do
               begin
                  ShowMessage(e.Message);

                  if IBTransaction2.Active then
                     IBTransaction2.Rollback;
               end;
         end;

   IBTransaction1.Commit;
end;

procedure TForm1.btActivarClick(Sender: TObject);
begin
   ProcesarTrigger( True );
end;

procedure TForm1.btDesactivarClick(Sender: TObject);
begin
   ProcesarTrigger( False );
end;

end.


Espero te sirva.
Saludos.
Responder Con Cita