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 12-09-2011
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.744
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
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:
Código Delphi [-]
begin
  try
     AbriBaseDeDatos;
  except
     ShowMessage('No pude abrir la base de datos'); 
  end;
  ModificarValorTabla;
end;
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:

Código Delphi [-]
begin
  BaseAbierta := False;
  try
     AbriBaseDeDatos;
     BaseAbierta := True;
  except
     ShowMessage('No pude abrir la base de datos');
  end;
  if (BaseAbierta) then
    ModificarValorTabla;
end;
Responder Con Cita
  #2  
Antiguo 13-09-2011
jsc jsc is offline
Miembro
 
Registrado: nov 2003
Posts: 144
Poder: 21
jsc Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 13-09-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.481
Poder: 21
newtron Va camino a la fama
¿Es posible que durante la ejecución del programa vayas creando objetos que no vayas liberando de la memoria?
__________________
Be water my friend.
Responder Con Cita
  #4  
Antiguo 13-09-2011
jsc jsc is offline
Miembro
 
Registrado: nov 2003
Posts: 144
Poder: 21
jsc Va por buen camino
insuficient memory

Cita:
Empezado por newtron Ver Mensaje
¿Es posible que durante la ejecución del programa vayas creando objetos que no vayas liberando de la memoria?
es un problema que me persigue desde hace tiempo y en esta ocasión he procurado, crear los forms de la aplicación segun los vaya necesitando a ver si asi corregia el problema.cuando cierro los forms, libero el mismo...
Código:
query1.free;
action:=cafree;
los forms ya estan diseñados pero lo que hago es al ejecutar la aplicacion crear el form principal y segun pulse el boton correspondiente crear y mostrar el que necesite.
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
Responder Con Cita
  #5  
Antiguo 13-09-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.481
Poder: 21
newtron Va camino a la fama
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.
__________________
Be water my friend.
Responder Con Cita
  #6  
Antiguo 13-09-2011
jsc jsc is offline
Miembro
 
Registrado: nov 2003
Posts: 144
Poder: 21
jsc Va por buen camino
Cita:
Empezado por newtron Ver Mensaje
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.
pues no se, seria cuestion de hacer pruebas teniendo solo cargado delphi o incluso viendo la memoria disponible cuando arranca...
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
Responder Con Cita
  #7  
Antiguo 13-09-2011
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.744
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
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.
Código Delphi [-]
program MiPrograma;

uses
  MemCheck in '..\Utilidades\MemCheck.pas',
  Forms,
  SysUtils,
  ...;

{$R *.RES}

begin
  MemChk;

  Application.CreateForm(TDMMain, DMMain);
  Application.CreateForm(TFMMain, FMMain);

  Application.Run;
end.
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;
Responder Con Cita
  #8  
Antiguo 13-09-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.481
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por duilioisola Ver Mensaje
Yo para cazar los "Memory Leaks" utilizo la unidad MemCheck.
Tomo nota, gracias.
__________________
Be water my friend.
Responder Con Cita
  #9  
Antiguo 13-09-2011
jsc jsc is offline
Miembro
 
Registrado: nov 2003
Posts: 144
Poder: 21
jsc Va por buen camino
mem check

creo que me sera de gran ayuda
gracias duilioisola por el aporte
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Capturar Errores con Try, Finally, End GerTorresM OOP 1 23-04-2011 23:16:01
try-try-finally-finally roman Varios 33 20-08-2008 02:27:00
Try Except --finally-- Caral Varios 13 02-10-2006 22:12:24


La franja horaria es GMT +2. Ahora son las 11:14:02.


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