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:
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"