Triggers y ADS

Triggers y ADS

Postby manuelcalerosolis » Mon Oct 01, 2012 9:59 am

Hola a todos,

Estoy empezando a trabajar con el diccionario de datos de ADS, entre otras cosas para poder acceder desde PHP a mis datos y utilizar la potencia de los TRIGGERS.

Pero tengo algún q otro problema pq el programa me hace cosas raras si la tabla q estoy tocando tiene asociado un trigger, y este mismo trigger funcionan perfecto si el cambio lo hago desde Advantage Data Architect, no se si debo llamar a alguna función de ADS para habilitar el uso de Triggers.

Os dejo un ejemplo del trigger q utilizo.

Code: Select all  Expand view


DECLARE @id Integer;
DECLARE @co CURSOR AS SELECT * FROM __OLD;
DECLARE @cn CURSOR AS SELECT * FROM __NEW;
DECLARE @userName NCHAR(50);
DECLARE @appName NCHAR(50);
@userName = USER();
@appName = APPLICATIONID();
OPEN @co;
OPEN @cn;
TRY
FETCH @co;
FETCH @cn;
INSERT INTO SqlOperationLog ( DATETIME, USERNAME, APPNAME, TABLENAME, OPERATION )
VALUES ( Now(), @userName, @appName, 'DatosPais', 'UPDATE' );
@id = LASTAUTOINC(STATEMENT);
IF (( @co."CCODPAI" IS NOT NULL AND @cn."CCODPAI" IS NULL) OR
( @cn."CCODPAI" IS NOT NULL AND @co."CCODPAI" IS NULL) OR
( @co."CCODPAI" <> @cn."CCODPAI") )
THEN
INSERT INTO SqlColumnLog ( OPERATIONID, COLUMNNAME, USERNAME, APPNAME, TABLENAME, OLDVALUE, NEWVALUE )
VALUES ( @id, 'CCODPAI', @userName, @appName, 'DatosPais', cast( @co."CCODPAI" as sql_varchar ), cast( @cn."CCODPAI" as sql_varchar ) );
END IF;

IF (( @co."CNOMPAI" IS NOT NULL AND @cn."CNOMPAI" IS NULL) OR
( @cn."CNOMPAI" IS NOT NULL AND @co."CNOMPAI" IS NULL) OR
( @co."CNOMPAI" <> @cn."CNOMPAI") )
THEN
INSERT INTO SqlColumnLog ( OPERATIONID, COLUMNNAME, USERNAME, APPNAME, TABLENAME, OLDVALUE, NEWVALUE )
VALUES ( @id, 'CNOMPAI', @userName, @appName, 'DatosPais', cast( @co."CNOMPAI" as sql_varchar ), cast( @cn."CNOMPAI" as sql_varchar ) );
END IF;

IF (( @co."CBNDPAI" IS NOT NULL AND @cn."CBNDPAI" IS NULL) OR
( @cn."CBNDPAI" IS NOT NULL AND @co."CBNDPAI" IS NULL) OR
( @co."CBNDPAI" <> @cn."CBNDPAI") )
THEN
INSERT INTO SqlColumnLog ( OPERATIONID, COLUMNNAME, USERNAME, APPNAME, TABLENAME, OLDVALUE, NEWVALUE )
VALUES ( @id, 'CBNDPAI', @userName, @appName, 'DatosPais', cast( @co."CBNDPAI" as sql_varchar ), cast( @cn."CBNDPAI" as sql_varchar ) );
END IF;

IF (( @co."CRESPAI" IS NOT NULL AND @cn."CRESPAI" IS NULL) OR
( @cn."CRESPAI" IS NOT NULL AND @co."CRESPAI" IS NULL) OR
( @co."CRESPAI" <> @cn."CRESPAI") )
THEN
INSERT INTO SqlColumnLog ( OPERATIONID, COLUMNNAME, USERNAME, APPNAME, TABLENAME, OLDVALUE, NEWVALUE )
VALUES ( @id, 'CRESPAI', @userName, @appName, 'DatosPais', cast( @co."CRESPAI" as sql_varchar ), cast( @cn."CRESPAI" as sql_varchar ) );
END IF;

FINALLY
CLOSE @co;
CLOSE @cn;
END TRY;

 


Muchas gracias.
User avatar
manuelcalerosolis
 
Posts: 149
Joined: Mon Oct 10, 2005 9:30 am
Location: Huelva - Spain

Re: Triggers y ADS

Postby softruz » Wed Oct 03, 2012 8:31 am

Muy buenas Manuel,
segun el gestor de bases de datos que utilices los Triggers se pueden configurar de una forma u otro, normalmente en la mayoría de gestores los triggers están activados por defecto, eso quiere decir, cuando tu creas un Triggers asociado a una tabla este se ejecuta automáticamente cuando hagas un INSERT, UPDATE o DELETE (según la definicion del trigger) y esta ejecución la activa el gestor de bases de datos, eso quiere decir que si en el cliente que utilizas funciona bien, en tu programa debería también funcionar.

Decirte que en la definicion que has mandado del Trigger no aparece si lo creas para que se active con INSERT, UPDATE o DELETE, esto puede ser lo que te está pasando, lo mismo lo creas para INSERT y en el cliente SQL haces un INSERT y te funciona y despues en tu programa haces un UPDATE y te crees que no funciona, pero realmente el Trigger esta funcionando bien.

Un Saludo. Y espero haberte ayudado. Si tienes dudas postea.
softruz
 
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Re: Triggers y ADS

Postby manuelcalerosolis » Wed Oct 03, 2012 8:56 am

Softruz,

Los triggers q hago son para AFTER UPDATE, efectivamente en la definición del trigger no lo puse pero en mi código esta.

Muchas gracias.
User avatar
manuelcalerosolis
 
Posts: 149
Joined: Mon Oct 10, 2005 9:30 am
Location: Huelva - Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 82 guests