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; 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:
Código Delphi
[-]
procedure TForm1.Button2Click(Sender: TObject);
begin
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('SELECT FROM');
ZQuery1.Active:=false;
ZConnection1.StartTransaction;
try
ZQuery1.active:=true;
ZConnection1.Commit;
except
on E:EZSQLException do
begin
ShowMessage('Error codigo: '+IntToStr(E.ErrorCode)+' - '+E.Message);
ZConnection1.Rollback;
end;
end;
end;
Espero su ayuda y muchas gracias de antemano a todos.
PD: En el uses he agregado "ZDbcIntfs"