Ver Mensaje Individual
  #2  
Antiguo 20-01-2011
Avatar de vmorillos
vmorillos vmorillos is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 17
Reputación: 0
vmorillos Va por buen camino
Smile 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:

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"
__________________
dibe
Responder Con Cita