FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Triggers y ADS
Posts: 149
Joined: Mon Oct 10, 2005 09:30 AM
Triggers y ADS
Posted: Mon Oct 01, 2012 09: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 (fw): Select all Collapse
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.
Posts: 485
Joined: Fri Feb 09, 2007 10:34 AM
Re: Triggers y ADS
Posted: Wed Oct 03, 2012 08: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.

Posts: 149
Joined: Mon Oct 10, 2005 09:30 AM
Re: Triggers y ADS
Posted: Wed Oct 03, 2012 08: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.

Continue the discussion