Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Ado (https://www.clubdelphi.com/foros/showthread.php?t=36491)

efelix 13-10-2006 18:47:21

Ado
 
:confused: Hola a todos, estoy desesperado, acudo a ustedes como última alternativa esperando resolver mi problema, espero puedan ayudarme, el problema es el siguiente. Soy nuevo en el trabajo con delphi, lo asumí porque me gustó mucho como lenguaje de programación, estoy inmerso en el desarrollo de un proyecto donde utilizo ADO para conectarme a una base de datos sql server con el proveedor oledb. La aplicación tiene que ver con la emisión de cheques y la recepción de facturas. Tengo un formulario para introducir nuevos cheques y la vez por supuesto realizar el pago de las facturas, entre las tablas cheques y facturas existe una relación de uno varios ya que con un cheque se pueden pagar varias facturas. El formulario está implementado de tal forma que cuando establezco a verdadero el campo pagado de la tabla factura el importe de la misma o las mismas ,ya que pueden ser varias, se adiciona el campo importe de la tabla cheque. Todo funciona de maravillas hasta ahí, pero cuando por error se agrega un número de cheque ya existente y se establece a verdadero el campo pagado de la tabla factura me ocurre el siguiente error: "Class EOLeException with message Violation of Primary Key constraint PK_Cheques. Cannot insert duplicate Key in object Cheques". La base de datos tiene tiene tres tablas hasta el moemento la Tabla Factura, Cheques y Proveedor. Estoy cansado de leer acerca del manejo de las excepciones pero no acabo de entenderlas, siempre utilizan d ejemplo la que se produce en la clase EConvertError o en la Clase EDivbyZero la cual es bastante sencilla, pero no he visto nada sobre la clase EOLeException, agradecería que me ilustraran si se pued con algún ejemplo para ver si puedo entender esto y poder solucionar mi problema o a lo mejor una posible solución al problema planteado segú la experiencia y los conocimientos de ustedes. Muchas gracias.

luisgutierrezb 13-10-2006 19:00:00

pues las excepciones se tratan todas igual:

Código Delphi [-]
Try
  GuardarPago...
Except
  ShowMessage('No se pudo');
end;

la otra, porque cuando introducen el numero de cheque, revisas si ya se uso...

vtdeleon 13-10-2006 19:06:01

Saludos

El inconveniente con la Exception está claro, la tabla Cheques tiene un campo primaro que no permite el duplicado de un registro y por esa razon te envia el error.

Para manejar ese error, utiliza try-except o try-Finally

Código Delphi [-]
//rutinasX
try
//Buscarcheque
Exception //Si da error, puede adicionar {On EOLeException (no muy seguro)} 
//Mensaje personalizado del error
end;
//Continuidad de la rutina

//O
//rutinasX
try
//Buscarcheque
Finally //Si da error
//Continuidad de la rutina
end;

Espero te sirva

Neftali [Germán.Estévez] 16-10-2006 10:20:27

Cita:

Empezado por luisgutierrezb
pues las excepciones se tratan todas igual...

Se puede ser un poco más específico...

Código Delphi [-]
Try
  GuardarPago...
Except
  on E:EOLEException do begin
    ShowMessage('No se pudo; Se ha producido un error al guardar en Base de Datos. ' + E.Message + '(' + IntToStr(E.ErrorCode) + ')');
  end
  else begin 
    ShowMessage('Error desconocido al guardar en Base de Datos.' + E.ClassName);
  end;
end;


La franja horaria es GMT +2. Ahora son las 19:55:47.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi