Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Gestión de errores

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Gestión de errores Responder citando

¿Cómo puedo saber los códigos de error que me devuelve un programa para tratarlos con un bucle try catch?

Me explico. Por ejemplo: tengo que cargar en una tabla paradox un campo fecha; si trato de cargar 35/13/1900 (dd/mm/aaaa) me dará un error de fecha ilógica. Ahora, con try catch, grabo un fichero con el registro que garba mal, pero no sé como informar que es lo que ha grabado mal. Uso este código:
Código:
catch (...)
{
     lError = true;
     fprintf(fErrores, "REGISTRO ERRONEO » Comer.: %s %s, Mes: %s\r\n",
           cComercio.NumComercio, cComercio.NomComercio, cMensual.c_str());
}

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Ke tal Angel?, mira... de forma generalizada ignoro si se pueden capturar todos los mensajes de error de una aplicación, lo que si me he fijado es que en el C++ Builder 6 cuando ejecuto el programa desde el IDE y salta una excepción el error mostrado es bastante más descriptivo que el que se muestra si el programa es ejecutado fuera del entorno de programación. Pues bien, aprovechando esa descripción más detallada que da el error desde el IDE puedo ver como me muestra el nombre del error que en el caso de fechas mal introducidas es EConverError y sabíendolo puedo utilizarlo en un try - catch, ahí va un ejemplo:

en un Form tengo un Edit y un botón, al pulsar ese botón tengo que guardar la fecha que el usuario ha introducido en el Edit a una tabla de una base de datos.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
try {
TDate fecha = StrToDate(Edit1->Text);//aquí se hace la conversión
Table1->Insert();
Table1Fecha->Value = fecha;
Table1->Post();
}
catch(EConvertError &E){//...y si la conversión no funciona
Application->MessageBoxA("La fecha introducida NO es correcta",
"Fecha incorrecta",MB_OK|MB_ICONSTOP);
Edit1->SetFocus();
}

}

Creo que buscabas una respuesta más generalizada para las excepciones pero bueno, es todo lo ke puedo hacer por ti.
Saludos Wink .
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Re: Gestión de errores Responder citando

No se si es lo que necesitas, pero cuando cuando yo voy intervenir una excepcion y no se de que tipo es, primero hago una prueba del error para que me devuelva el tipo de error. Y luego cuando sepa de que tipo es, simplemente la declaro, por ejemplo asi:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int a=9;

try
{
a = a/0;
}
catch(Exception &N)
{
ShowMessage(N.Message);
}
}

Y el mensaje mostrado será "EDivByZero", y ya sabiendo que clase de error es voy y lo declaro.

Espero que te sirva
_________________
"Cállate, o di algo mejor que el silencio"
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Vaya, gracias a los dos. Ya sabía yo que no me fallaría la gente de este foro. Wink

Efectivamente, las dos rutinas fucionan bien, pero lo que me interesa es interceptar el código de error no el literal para poner un bucle switch que gestione esos valores. ¿Dónde puedo capturar ese valor?
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.