![]() |
Try/except/finally
Hola,
quisiera saber si podeis ayudarme a controlar posibles fallos en mi aplicación. en tiempo diseño, constantemente me aparecen excepciones que supongo hacen que la aplicación deje cositas abiertas por ahí, y de vez en cuando, me sale un mensaje: Código:
falta de memoria utilizo codigo del tipo Código:
TRY EXCEPT Código:
TRY query1.open; todo correcto, la cuestion es que posterior a esto, salta una excepción indicando lo mismo en ingles y para mi gusto es algo que no queda nada bien y entiendo que es algo que no tengo controlado o no lo estoy haciendo bien. podria llegar a poner Código:
on exception do codigo... en el EXCEPT me faltaria poner Código:
raise espero haberme explicado y que podais ayudarme utilizo Código:
TRY |
Hola.
En el ejemplo que citas si puedes cerrar el query antes del mensaje
Saludos |
try/except/finally
ok,
ahora no puedo probarlo mañana comento algo al respecto seria mejor tratar el try con la excepción correcta? con lo que pongo seria suficiente para cualquier operación que se haria con el query o tendría que tratar alguna excepción más? Código:
TRY Código:
on EDatabaseError do gracias |
El "ON" es para filtrar el tipo de excepción, cuando se quiere dar una respuesta diferente para ciertos tipos. Así:
Además te permite acceder a los métodos de la excepción, tales como el identificador, el mensaje, etc. También ten en cuenta que cada bloque filtrará la excepción indicada y todas aquellas de clases derivadas que no hayan sido procesadas ya. Por eso "ON Error: Exception " obtendrá todas las excepciones que no se hayan filtrado. Y por eso es importante el orden en el que se pongan, ya que se pueden ocultar si se ponen en el orden incorrecto (por ejemplo, si pones "ON Error: Exception " la primera, entonces nunca ejecutará el resto). De todas formas, puedes anidar un "FINALLY" dentro del "EXCEPTION":
|
try/except/finally
Cita:
muchas gracias me parece muy completo el aporte un comentario;entiendo que en el segundo try(el anidado) si ocurriera alguna excepción/error al intentar Código:
edit1.text:= query1.fieldbyname('campo').asstring muchas gracias |
Cita:
La respuesta ya te la dió Ñuño en el código que mencionás con un comentario:
Un saludo. |
Mira este hilo también...
Si después de un try..except te salta una excepción más, seguramente es que tu codigo depende de que se ejecute correctamente el codigo en ese bloque: En este código te saltará primero el mensaje de que "No puede abrir la base de datos" y luego uno del tipo "Database not Open". Lo correcto sería:
|
try/except
ok,
la cosa me queda mas clara; gracias por los aportes lo unico, he hecho pruebas pero todavia sigue saliendome en ocasiones el mensaje de "insuficient memory..." y lo que comentaba, me obliga a cerrar todo delphi y volver a abrir el proyecto para seguir trabajando y programando. no se si es algo normal, si le pasa a mas gente o es solo a mi porque algo hago mal. el caso es que si estoy programando y ejecuto el codigo para ver que tal funciona, se me da el caso que da errores que en tiempo diseño no he contemplado y tengo que modificar el codigo.Hasta aqui todo bien pero si hago cambios para corregir el problema, sigo programando y probando el codigo y se vuelven a dar fallos en más ocasiones, llega un punto en que como decia antes tengo que cerrar todo. De ahi, mi consulta sobre este hilo, no se si era algo que programaba mal... o es algo que es normal; si pruebo el codigo y da fallo, salta el mensaje de excepción (no el mensaje que yo tengo puesto en el EXCEPT) y he probado una vez ocurrido esto, seguir ejecutando el codigo con F7, y es entonces cuando observo que salta la excepción que tengo puesto con el TRY y pensaba que haciendo esto, de alguna manera pudirea solucionar el problema de "insuficient memory" pero no es el caso me pasa lo mismo. hay manera de controlarlo? espero haberme explicado |
¿Es posible que durante la ejecución del programa vayas creando objetos que no vayas liberando de la memoria?
|
insuficient memory
Cita:
Código:
query1.free; el mensaje "insuficient memory" me sale cuando abro algun form y me salta la excepcion en mas de una ocasion.el proceso exacto es: -probar el codigo -da errores -hago cambios, y vuelvo a compilar -pruebo otra vez el codigo -da errores -hago cambios y compilo -da errores ... -hago cambios y compilo -intento probar el codigo y salta la excepcion -cerrar la aplicación guardando o sin guardar los cambios -salir de delphi -abrir delphi y el proyecto -seguir trabajando en tiempo de ejecucion no llego a crear ningun control |
A mi me da ese problema muy raramente cuando me salen muuuuuuuchos errores. A ver si va a ser que tu equipo tiene muchas cosas cargadas en memoria y deja poca disponible para el delphi.
|
Yo para cazar los "Memory Leaks" utilizo la unidad MemCheck.
La puedes bajar de aquí. Básicamente debes ponerla dentro de tu proyecto, como primera unidad. Lo primero que debe hacer tu aplicación es llamar a MemChk. Para compilar tu versión de desarrollo debes activar algunos checks en las opciones de compilacion: Mira aquí. No olvides activar la opción TD32 debug information en la pestaña Linker. Ejecutas el programa y al salir te da información en un texto que debería serte útil para buscar lugares donde no liberas objetos. Nota: Luego de agregar MemCheck al proyecto y haber tocado las opciones de compilación, deberías borrar todas las *.dcu para recompilar completamente tu proyecto. Nota 2: Con las opciones de compilacion puestas el .exe es mucho más grande. Solo deberías utilizar estas opciones durante el desarrollo. Antes de entregar al cliente deberías quitar todas las opciones y comentar la línea //MemChk; |
Cita:
probare el caso es que me tiene un tanto preocupado por si es algo que no hago bien, que no controlo, que se me escapa en la programacion y demas. si ya le pasa a alguien mas puedo darme un respiro gracias por todo |
Cita:
|
mem check
creo que me sera de gran ayuda
gracias duilioisola por el aporte |
La franja horaria es GMT +2. Ahora son las 21:46:56. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi