PDA

Ver la Versión Completa : Forzar envio a DB


jollodel
27-04-2005, 13:44:14
Hola a todos!!

Tengo una duda q espero q me podais resolver! Dispongo de un TSQLTable unido a un Provider en un Modulo de Datos y un ClientDataSet ligado al Provider!! Mi problema es q kiero q se dispare un trigger de la base de datos siempre que haga applyupdates sobre el ClientDataSet en cuestion! Tal y como esta ahora solo se dispara el trigger si hago un algo cambio en los datos del clientdataset, pero me gustaria q se disparara aunq no hubiese ningun cambio!!

Alguna idea? Se q debe ser alguna tonteria pero no doy con la solucion!!

Un saludo y maxas gracias!

delphi.com.ar
27-04-2005, 14:41:57
Una forma prolija puede ser sacar el código del trigger y ponerlo en un store procedure, y que el trigger llame al store procedure y cuando quieras disparar este store procedure simplemente lo ejecutas. Obviamente no todo los triggers son portables a stores procedures, algo mas desprolijo que se me ocurre es hacer un update que no cambie datos (obviamente si el trigger evaluamos los cambios, no servirá de nada) :


UPDATE TABLA
SET CAMPO = CAMPO
WHERE ID = :ID


Saludos!

jollodel
28-04-2005, 09:51:14
Entiendo lo q me dices pero no me parece una solucion muy "elegante"!! Al parecer si el cliente detecta q no ha habido ningun cambio no envia los datos a la base de datos! Hay alguna opcion en el provider q deba activar para q los datos sean siempre enviados a la base de datos? Y de sta manera sea la base de datos kien maneje la informacion a traves del disparador.

No se si me he explicado con claridad, pero si alguien puede hecharme una cable staria muy agradecido!!

Chauuu

__hector
28-04-2005, 14:47:51
No, y creo que tienes un error de diseño en tu aplicación. Un trigger esta supuesto a ejecutarse despues de una insercion, actualizacion o borrado de datos. Si ninguno de esos eventos sucede en el dataset, el trigger no tendria por que dispararse.

Yo tu y voy pensando en sacar codigo del trigger y ponerlo en otro sitio (SP o Function) porque, aunque de funcionar funciona, definitivamete no es la forma correcta de hacerlo.