![]() |
Problemas con ZEOS
Hola a todos! soy nuevo usando los componentes zeos para delphi7! mi problema es el siguiente! Estoy utilizando un Zconnection, Ztable, Datesource y DBgrid. Bien al momento de correr el programa carga los datos de la base de datos perfetamente en el DBgrid! pero cuando intento insertar un nuevo registro me muestra el siguiente error!:
"Project Histoca_Pro.exe raised exception class EStackOverflow with message 'Stack overflow'. Process stopped. use step or run to continue" los datos los obtengo de unos edit y al darle a un boton los guardo(pero no lo hace)... el codigo en el boton es el siguiente: Ztable1.Open; Ztable1.Insert; Ztable1.FieldByName('cedula').AsString := Edit1.Text; Ztable1.FieldByName('nombres').AsString := Edit2.Text; Ztable1.FieldByName('apellidos').AsString := Edit3.Text; Ztable1.Post; |
¡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:
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:
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. :) |
Mas bien creo que estás haciendo esa inserción a la BD varias veces, supongo que para algun proceso en particular, ya que no pones más código. Revisa si pusiste un ciclo repeat-until, o while Do que la condición que lo controla realmente se cumpla y/o que no se te haya olvidado mover el control de la condicion, como cuando le dices: "repetir esto hasta que i=5 y resulta que en el ciclo nunca haces i=i+1", por lo tanto i nunca será 5.
Por otro lado, es mejor usar Append que Insert ya que la primera coloca el nuevo registro al final de la tabla mientras que Insert lo hace en el lugar donde se encuentre el cursor en ese momento. Si pones algo más de código sin duda será de ayuda. |
| La franja horaria es GMT +2. Ahora son las 10:58:57. |
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