Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-12-2005
adpa adpa is offline
Miembro
 
Registrado: dic 2005
Posts: 22
Poder: 0
adpa Va por buen camino
Excepciones



Hola, estoy empezando a programar en Delphi 4

Tengo el siguiente problema con las excepciones.

Tengo una función con un bucle y dentro de este bucle se llama a una función

donde se pueden producir excepciones que yo capturo.

Entonces si se produce una excepción ya no continua en el bucle,

¿Como se hace para que continue con el bucle, hasta que llegue a la

condición de salida de este?

Gracias es muy urgente
Responder Con Cita
  #2  
Antiguo 14-12-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.269
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Antes de nada y puesto que son tus primeros mensajes, bienvenido al foro.
Te recomiendo que leas la guía de estilo: http://www.clubdelphi.com/foros/guiaestilo.php

Entre otras cosas varás que no es correcto repetir hilos en diferentes foros.

En cuanto a la pregunta, si capturas la excepción dentro del bucle (en lugar de fuera), no debería haber problema para que el bucle cntinuara si la condición se sigue cumpliendo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 14-12-2005
adpa adpa is offline
Miembro
 
Registrado: dic 2005
Posts: 22
Poder: 0
adpa Va por buen camino
Hola todo@s.

En principio perdón pero no me di cuenta de las reglas de estilo.
Capturo la excepción en la función que se produce. Más o menos es esto

WHILE () DO
BEGIN
....
funcion que puede producir excepción
....
END

Funcion que puede producir excepción
BEGIN
try
...
except
on E: EConvertError do
raise eCamposNoValido.Create('');
end;
END;

Entonces si se produce una excepción al volver al bucle se sale.

Gracias
Responder Con Cita
  #4  
Antiguo 14-12-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.269
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
En realidad estás capturando la excepción (try..except), pero luego la estás "lanzando" de nuevo al utilizar:

Código Delphi [-]
  raise eCamposNoValido.Create('');


Con ésto lo que estás haciendo es volver a lanzarla; Lo lógico aquí sería guardar valor, sacar un mensaje,... pero si vuelves a hacer el raise, la excepción sigue, llega al bucle y como ahí no hay Try..except que la capture, pues se para (como tú dices).

¿Exactamente qué quieres hacer cuando se produzca una excepción (antes de continuar con el bucle)?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 14-12-2005
adpa adpa is offline
Miembro
 
Registrado: dic 2005
Posts: 22
Poder: 0
adpa Va por buen camino
Lo que quiero hacer cuando se produzca la excepción es que se continue con el bucle.

Pero en la función de bucle que sepa que se ha produccido una excepción para luego informar al usuario cuando se termine el bucle.

Espero que me entiendas, Gracias
Responder Con Cita
  #6  
Antiguo 14-12-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Podrías utilizar un TStringList en el que almacenes las excepciones que se vayan produciendo en las vueltas del bucle y presentarlas al final de éste:

Código Delphi [-]
var
  Errores: TStringList;

begin
  Errores := TStringList.Create;

  try
    while condición do
    begin
      try
        { código propenso a errores }
      except
        on E: EConvertError do
          Errores.Add(E.Message);
      end;
    end;

    (* Mostrar errores en un memo, por ejemplo *)
    Memo1.Lines.AddStrings(Errores);
  finally
    Errores.Free;
  end;
end;

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:13:21.


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
Copyright 1996-2007 Club Delphi