Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Consejo para principiante sobre Disparador y Procedimiento almacenado (https://www.clubdelphi.com/foros/showthread.php?t=57396)

NPIdea 13-06-2008 13:56:03

Consejo para principiante sobre Disparador y Procedimiento almacenado
 
Hola a todos.

Mi consulta es de diseño.

Tengo dos tablas Facturas y Conceptos.

Lo que quiero es que cada vez que tenga un insert, update o delete en conceptos me recalcule el total de la factura. Escojo After en vez de Before

1-Crear un trigger para los tres supuestos ¿Como llamo al procedimiento almacenado? ¿execute procedure mirartotal?
2-Crear el prodecimiento almacenado mirartotal

UPDATE Facturas SET TOTAL=(Select sum(total) from Conceptos where Facturas.factura=Conceptos.factura)


LQue me aconsejais?

Lepe 13-06-2008 14:21:35

En principio, puedes ahorrarte el SP ¿no?. colocas directamente en el disparador la instrucción SQL.

Si te decides por tener un SP, pues elije el nombre más descriptivo posible: "ActualizaTotalFactua"

Es muy fácil complicar las cosas, intenta seguir el método KISS (Keep It Simple Stupid ;)).

Saludos

NPIdea 16-06-2008 10:22:38

Problema en el disparador.
 
Bueno, lo primero gracias por contestar y darme ese consejo. Ya os he comentado que soy muy novato.

Tengo funcionando el disparador con el siguiente código:
Código:

UPDATE FACTURAS SET TOTAL=(Select SUM(Total) from conceptos where conceptos.FACTURA=new.Factura) where factura=new.Factura;
Con el IBExpert meto un concepto nuevo y validando la transacción en Conceptos y Facturas me guarda los cambios, pero desde Delphi no me lo hace.

Trabajo con los IBX, las IBTransaction están en Read commited y despues de un post en el evento afterpost le hago el Commit y abro el IBDataset.

¿Algo hago mal?

NPIdea 16-06-2008 13:46:23

Pues debe ser que no devuelve nada la instrucción Select(SUM
 
Bueno pues sigo intentando hacer funcionar esto.

Le he colocado detras del UPDATE otro, simplemente para ver si cambia y efectivamente si lo hace
Código:

UPDATE FACTURAS SET PAGADA=5 where Factura=new.Factura;
El fallo debe estar:

Código:

UPDATE FACTURAS SET TOTAL=(Select SUM(Total) from conceptos where conceptos.FACTURA=new.Factura) where factura=new.Factura;
Pero lo extraño es que con el IBExpert si que me funciona.

boreg 17-06-2008 20:15:33

Commit Transaction
 
Saludos NPIdea, ¿estas haciendo commit despues de hacer los cambios?, creo que por ahi debe de estar el problema.

NPIdea 18-06-2008 08:13:00

Gracias por vuestro interés
 
Bueno, pues ayer lo solucioné y lno pudé acceder al foro por la mañana.

Pues sí, era problema de los commit. Hacía commit de una tabla y abría la tabla y luego hacía el commit de la otra y no me guardaba los cambios.

Ahora hago commit en el mismo evento y los actualiza perfectamente.

Repito, muchas gracias.


La franja horaria es GMT +2. Ahora son las 00:22:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi