Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   No atrapa la excepcion (https://www.clubdelphi.com/foros/showthread.php?t=51056)

analia1979 05-12-2007 00:09:55

No atrapa la excepcion
 
hola a todos...

Tengo un codigo con try except que no esta tomando la excepcion y la maneja el handler interno cuando lo ejecuto desde el IDE de delphi.

Si lo ejecuto fuera del ide no hace nada.

El codigo es el siguiente:

Código Delphi [-]
if MessageBox(Handle, PChar('Desea Eliminar'), PChar('Confirmacion'), $00000024) = IDYES then
  begin
    try
      TClientDataSet(dsBase.DataSet).Delete;
      TClientDataSet(dsBase.DataSet).ApplyUpdates(0);
    except
      raise Exception.Create('Ese registro está relacionado con otras tablas')
    end;
  end;
end;

Si alguien me puede ayudar.. en que estoy fallando, mil gracias..:)

saldanaluis 05-12-2007 01:10:37

Funcionamiento normal del TRY en IDE
 
El que el TRY no te esté tomando el error para ser manejado por tu rutina en except es normal cuando estas haciendo las pruebas y ejecutando tus formas con F9. Pero si eso mismo lo ejecutas utilizando el .exe creado si te debe de funcionar.
Yo hice una pregunta similar hace como 6 meses y esto mismo fue lo que me respindieron.
Ahora, el que no te funcione al ejecutarlo desde el .exe si que es extraño. Me vas a disculpar pero ahi si me declaro incompetente.
Saludos.

egostar 05-12-2007 01:20:52

Cita:

Empezado por analia1979 (Mensaje 250449)
hola a todos...

Tengo un codigo con try except que no esta tomando la excepcion y la maneja el handler interno cuando lo ejecuto desde el IDE de delphi.

Si lo ejecuto fuera del ide no hace nada.

Si alguien me puede ayudar.. en que estoy fallando, mil gracias..:)

Hola, trata con esto

Código Delphi [-]
if MessageBox(Handle, PChar('Desea Eliminar'), PChar('Confirmacion'), $00000024) = IDYES then
  begin
    try
      TClientDataSet(dsBase.DataSet).Delete;
      TClientDataSet(dsBase.DataSet).ApplyUpdates(0);
    except
      ShowMessage('Ese registro está relacionado con otras tablas');
    end;
  end;
end;

Salud OS

Al González 05-12-2007 07:09:34

Usar OnReconcileError
 
¡Hola a todos!

Analia1979:

Estás creando y elevando una excepción en la sección Except de un bloque Try, lo cual es particularmente raro. El acercamiento que propone Egostar es más acertado, genéricamente hablando.

Pero tratándose del método TClientDataSet.ApplyUpdates, no esperes que las excepciones por errores en el servidor lleguen a ese punto del código. El método ApplyUpdates las atrapa y las canaliza al evento OnReconcileError. Es en él donde puedes mostrar el mensaje al usuario.

Por otro lado, no es del todo confiable asumir que cualquier error después de intentar eliminar un registro, se deba a que éste se encuentre relacionado con otra tabla. Puede haber más causas. Aunque, si no quieres complicarte, simplemente podrías cambiar el mensaje por "No pudo eliminarse el registro. Probablemente hay otros registros de la base de datos que están relacionados con él".

Por favor, no dejes de retroalimentar este hilo con tus avances o en caso de tener más dudas.

Un abrazo atrapado.

Al González. :)

analia1979 05-12-2007 13:37:21

Usar OnReconcileError
 
Hola a todos!!..

Muchas gracias a todos los que acudieron a mi problema.
Al Gonzales use tu solucion y es verdad lo que dices, use el evento onReconcileError para mostrar el mensaje al usuario.
Es verdad tb que no todo errror al eliminar se deba a que esta relacionada con otra tabla, voy a intentar ver como puedo hacer para asegurarme que ese sea el error.., cualquier duda recurro a ustedes.
Muchas gracias...:)
Saludos..


La franja horaria es GMT +2. Ahora son las 12:04:07.

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