PDA

Ver la Versión Completa : Desactivar trigger


Vlady
22-07-2008, 16:55:16
Hola amigos del foro mi pregunta es la siguiente como puedo desde delphi desactivar un trigger. Utilizo delphi 7 y firebird 2.0

poliburro
22-07-2008, 17:03:35
supongo que será algo como esto:

alter triger disable

jhonny
22-07-2008, 18:23:18
Bueno, para agregarle algo a lo dicho por poliburro, para inactivarlo un trigger la cosa es exactamente así:


alter trigger Nombre_del_trigger inactive

Vlady
19-07-2011, 00:08:55
Muchas gracias.
Ahora tengo una inquietud que se suma al tema, yo necesito correr un script que va a correr nuevos datos, pero me está generando problemas con los trigger before insert y generadores, el problema es que son muchas tablas para yo ir desactivando trigger por trigger para poder hacer la insercción correctamente, hay una forma desde delphi de desactivar todos los triggers "before insert" de todas las tablas a la vez.

Casimiro Notevi
19-07-2011, 00:33:35
Abajo de esta página tienes varios enlaces con ese mismo tema.

cdac901
07-08-2011, 22:29:00
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:


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.