Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-10-2004
cesar_picazo cesar_picazo is offline
Miembro
 
Registrado: ene 2004
Posts: 65
Poder: 21
cesar_picazo Va por buen camino
como sincronizo el Commit de mi api con un trigger en Firebird

Buenas tardes, uso los componente DBExpress y delphi 6,Y estoy agregando trigger en las tablas antes de almacenar,y son validaciones de modificacion de nombre(columna), pero no se si mi procedimiento es el correcto.

Esto debido a lo siguiente
Cree una Exception saldo_check

Cree un triguer
CREATE TRIGGER "EJEMPLO2" FOR "EJETRIGUER"
ACTIVE BEFORE UPDATE POSITION 0
AS
BEGIN
IF ( OLD.NOMBRE <> NEW.NOMBRE) then
EXCEPTION SALDOS_CHECK;
END

Todo esto bien si lo hago directo en IBConsole, pero al estar en la aplicación, realizo la modificacion del registro y comito la transaccion, y aparantemente almacena los datos, pero al cerrar y volver a Abrir la aplicación en el renglon que modifique el nombre no se almaceno el cambio pero esto es correcto por el trigger, mas si modifico 2 renglones y en uno modifico el nombre y en otro no, en el que registro que modifique el nombre no se almacena la información y en el otro si, el detalle(problema) aqui es que las 2 modificaciones forman parte de la misma transaccion, por tal motivo se tendran que deshacer ambos cambios.

Ejemplo:
Renglon 1 nombre Cesar
Renglon 2 nombre oscar
Se almacena la información o comita la transaccion y se inicia una nueva


Renglon 1 nombre Cesar (se hace una modificacion, pero como esta el trigger no debe permitir modificar el nombre)
Renglon 3 nombre Cesar (se agrega un nuevo registro)
Se almacena la información o comita la transaccion y se inicia una nueva, el problema es que al tratar de comitar los datos como existe la validacion del Trigger no debe ser posible almacenar los datos.

Se vuelve a Abrir la aplicación
Existe el Renglon
1 Correcto
2 InCorrecto por el trigger
3 InCorrecto porque se trata de almacenar la información el commit del renglon 2 si se deshiso y en el renglon tres no se debio de almacenar

Como ven es algo complejo, pero esto es con el fin de que en un momento dado este tipo de triggers se ejecuten al generar un factura, y que es actualice información de existencia, si alguna es erronea se vuelva a reacer el documento.

Si alguien sabe que se tiene que hacer para que el rollback se ejecute se lo agradeceria
Responder Con Cita
  #2  
Antiguo 11-10-2004
cesar_picazo cesar_picazo is offline
Miembro
 
Registrado: ene 2004
Posts: 65
Poder: 21
cesar_picazo Va por buen camino
En vista del exito obtenido yo mismo me respondo

Bueno lo que hice fue agregar el compomente que dispare store procedure

Quite los trigger de las tablas y antes de comitar la transaccion valido el Store procedure, si este dispara la exception lo que hago es que le doy roll back a la transaccion.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:27:31.


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
Copyright 1996-2007 Club Delphi