 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 11 Nov, 2003 1:30 pm Asunto: Gestión de errores |
|
|
¿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 |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mar 11 Nov, 2003 2:44 pm Asunto: |
|
|
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 . _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
-Spencer- Capt

Registrado: 03 Mar 2003Mensajes: 160Ubicación: Armenia - Colombia
|
Publicado: Mar 11 Nov, 2003 4:32 pm Asunto: Re: Gestión de errores |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 12 Nov, 2003 8:11 am Asunto: |
|
|
Vaya, gracias a los dos. Ya sabía yo que no me fallaría la gente de este foro.
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|