Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 25-01-2009
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¡Hola!

Una causa muy común de esa excepción es cuando el programa entra en recursión infinita.

Una proceso recursivo es aquel que resulta en la ejecución de una rutina (procedimiento, función, método, evento) antes de haber terminado una ejecución anterior de esa misma rutina. En muchas situaciones es útil emplear procesos recursivos, pero cuando esto sucede de forma no controlada el resultado puede ser el agotamiento de la memoria, por no darse ninguna condición que evite alguna de las llamadas que el código realiza, repitiéndose el ciclo de llamadas indefinidamente.

Cuando se da esta recursión "infinita", el espacio de memoria donde el programa guarda variables y otros datos por cada llamada a alguna rutina llega al punto de "desbordamiento" (stack overflow). Así sucede, por ejemplo, en este caso:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.Click;
end;

Si tras ocurrir la excepción, presionas en el editor de Delphi la combinación de teclas Ctrl+Alt+S, aparecerá una de las muchas ventanas informativas del depurador, conocida como pila de llamadas (call stack). En ella podrás observar cuál fue el camino que siguió el programa hasta el punto donde ocurrió la excepción y con ello descubrir si estás haciendo mal uso de algún evento u otro elemento del programa, o en sí las rutinas que se están repitiendo una y otra vez y qué origina esa repetición.

Aunque también podría ser otra la causa, como bien lo dice la propia ayuda de Delphi:
Cita:
EStackOverflow is raised when the system is unable to allocate necessary stack space. This can happen because of [1] extremely large local variables, [2] deeply recursive routines, or [3] invalid machine-language code.
Lo primero que suelo hacer ante esa excepción es presionar Ctrl+Alt+S para ver si es debida a la segunda de esas tres causas.

Otra tarea de depuración sería colocar un punto de ruptura (tecla F5) en tu instrucción Open, y desde ese punto ejecutar el programa sentencia por sentencia (tecla F8). Esto para saber cuál de ellas es la rama que deriva en el error que aparece en pantalla.

Espero haber orientado. No dejes de comentarnos las novedades que hayas encontrado.

Al González.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Problemas con la conexion con Zeos Pachangero MySQL 5 24-01-2009 19:04:26
zeos lib problemas instalar vroa74 OOP 0 10-10-2008 22:09:10
problemas con zeos...ayuudaaaa Jheysson13 Conexión con bases de datos 33 25-06-2008 00:02:00
Problemas con Zeos y TDBChart :D pgraciap MySQL 1 21-11-2005 20:38:15
Problemas con Zeos + Interbase pyanqn Conexión con bases de datos 2 02-11-2005 15:40:34


La franja horaria es GMT +2. Ahora son las 00:31:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi