FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Transaccion, captura de error
Hola a todos, aqui pidiendo su consejo nuevamente. Debo mencionar primero que uso Zeos 6.6.6, mysql 5 y delphi 7.
Tengo tres tablas: una factura, el detalle de la factura (zDetalle) y una tabla producto. La tabla detalle como es logico tiene una llave compuesta por el codigo de la factura y el codigo de los productos. Lo que quiero es capturar el error al momento de insertar una llave duplicada en la tabla detalle, para lo cual uso el siguiente codigo: Código Delphi [-]procedure TForm1.Button1Click(Sender: TObject); var iCodigoProducto,iCodigoFactura,iCantidad : integer; fPrecio : Double; begin iCodigoProducto:=StrToInt(edProducto.Text); iCodigoFactura:=StrToInt(edFactura.Text); iCantidad:=StrToInt(edCantidad.Text); fPrecio:=StrToFloat(edPrecio.Text); ZConnection1.StartTransaction; try zDetalle.Insert; zDetalleProdCodigo.Value:=iCodigoProducto; zDetalleFactCodigo.Value:=iCodigoFactura; zDetalleCantidad.Value:=iCantidad; zDetallePrecio.Value:=fPrecio; zDetalle.Post; // <--- El error es lanzado aqui y no en el EXCEPT ZConnection1.Commit; except on E:EZSQLException do begin ShowMessage('Error codigo: '+IntToStr(E.ErrorCode)+' - '+E.Message); ZConnection1.Rollback; end; end; end; Pero el error es lanzado justo después de intentar el post y nunca entra al except y muestra el showmessage. Es extraño porque he puesto este otro codigo en otro botón y si entra al except:
Espero su ayuda y muchas gracias de antemano a todos. PD: En el uses he agregado "ZDbcIntfs"
__________________
dibe |
#2
|
||||
|
||||
Salieron mal las etiquetas
Hola a todos, aqui pidiendo su consejo nuevamente. Debo mencionar primero que uso Zeos 6.6.6, mysql 5 y delphi 7.
Tengo tres tablas: una factura, el detalle de la factura (zDetalle) y una tabla producto. La tabla detalle como es logico tiene una llave compuesta por el codigo de la factura y el codigo de los productos. Lo que quiero es capturar el error al momento de insertar una llave duplicada en la tabla detalle, para lo cual uso el siguiente codigo:
Pero el error es lanzado justo después de intentar el post y nunca entra al except y muestra el showmessage. Es extraño porque he puesto este otro codigo en otro botón y si entra al except:
Espero su ayuda y muchas gracias de antemano a todos. PD: En el uses he agregado "ZDbcIntfs"
__________________
dibe |
#3
|
||||
|
||||
Hola vmorillos
No es por querer modificar tu forma de trabajar, pero veo que estas insertando los datos directamente a la tabla.. que pasa si una vez que ingresa todo la persona se arrepiente de crear la Factura.... Bueno, tampoco quiero imponerte mi forma de trabajar (en realidad si...eso quiero ) Yo para estos casos utilizo una Tabla de Memoria, en donde inserto todos los datos de los productos (para el caso, Detalle Factura)... En el caso de insertar un codigo de producto que ya esta insertado, primero pregunto si dicho articulo existe.... si existe, despues pregunto si ya ha sido ingresado en el Detalle Factura... si ya fue ingresado lanzo mensaje de que el articulo ya existe, desea modificar o ingresar otro codigo... Ahora bien, para tu caso tambien se puede utilizar... solo tienes que hacer una consulta antes de insertar el Detalle por ejemplo, creo que seria algo así Cita:
antes Salu2
__________________
BlueSteel Última edición por BlueSteel fecha: 20-01-2011 a las 15:46:18. |
#4
|
||||
|
||||
Los codigos de los productos los jalo directamente de la tabla producto, por eso no hay problema. Y respecto de saber si se esta duplicando la llave compuesta (factura, producto) lo que trato es de no sobrecargar a la base de datos (mysql) tal como lo dice Delphius en este hilo : http://www.clubdelphi.com/foros/showthread.php?t=46215
Ademas este es un ejemplo, el código de mi programa es otro. Solo he tomado la parte que no me ejecuta correctamente, que es el ingreso al EXCEPT. Gracias BlueSteel.
__________________
dibe |
#5
|
||||
|
||||
Halle lo que buscaba
Probando y probando he encontrado lo que buscaba
Gracias a todos por su interés. Saludos
__________________
dibe |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Procedimiento almacenado no captura error | Carlos Hurtado | Firebird e Interbase | 0 | 27-01-2007 15:07:39 |
controlar error en transacción | kikodelphi | MS SQL Server | 2 | 12-05-2006 02:53:09 |
Captura de error en Procedimiento almacenado | lucasarts_18 | Firebird e Interbase | 11 | 28-12-2005 15:02:42 |
Devolver código de error de una transacción | kikodelphi | MS SQL Server | 7 | 18-10-2005 14:41:49 |
captura de Error de Interbase | digital | Firebird e Interbase | 2 | 25-06-2003 10:22:14 |
|