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 10-07-2016
Belen12 Belen12 is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 29
Poder: 0
Belen12 Va por buen camino
Problema Stack overflow

hola Buenas noches, Estoy trabajando con un listado de ventas el cual esta desarrollado en delphi 2010 y mysql-5. El cual cuenta con un formulario principal y un formulario secundario que es el "listado de ventas" en este se encuentra 2 dbgrid uno para el "detalle de ventas", el otro para las "ventas"
los cuales cada uno se encuentran asociado a un TzQuery de los componentes Zeos. La idea es cuando yo selecione una venta en el dbgrid "Ventas" me muestre sus respectivos detalles de venta. Para ello en los TzQuery en la propiedad MasterSourcer y MasterFields de cada TzQuery los tengo relacionado a sus data source y a su clave foranea. es decir

Query de ventas
MasterSourcer: dsDetalleVenta// este seria el datasource del detalle
MasterFields : idventa

Query de Detalle de ventas
MasterSourcer: dsVenta // este seria el datasource del la venta
MasterFields : idventa

Bien al formulario lo llamo de la siguiente forma:
Código Delphi [-]
procedure TfPrincipal.Listado5Click(Sender: TObject);
begin
  fmodulo.qVentas.Active:=true;
  fmodulo.qdetalle.Active:=true;
  tfListadosVentas.Create(self).ShowModal;
end;
y es aqui que me sale el siguiente error "project drugstore.exe raised exception class EStackOverflow with message 'Stack overflow' usando el depurador me marca error en la siguiente linea

Código Delphi [-]
tfListadosVentas.Create(self).ShowModal;

dejo las consulta sql de cada query:
Query venta:
Código SQL [-]
 
SELECT 
  `venta`.`idventa`,
  `venta`.`totalventa`,
  `venta`.`estadoventa`,
  `venta`.`idcliente`,
  `venta`.`fechavent`,
  `venta`.`horavent`
 
FROM
  `venta`
INNER JOIN clientes on (clientes.idcliente=venta.idcliente)

Query Detalle
Código SQL [-]
 
SELECT 
  `detalle_venta`.`idventa`,
  `detalle_venta`.`idproducto`,
  `detalle_venta`.`cantidad_venta`,
  `detalle_venta`.`precio_venta`,
  `detalle_venta`.`estado_detalleventa`
FROM
  `detalle_venta` 
INNER JOIN producto on (producto.idproducto=detalle_venta.idproducto)

espero que puedan ayudarme desde ya muchas gracias
Responder Con Cita
  #2  
Antiguo 10-07-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Si pudiste activar los dos query sin problema, entonces el problema esta en el form

* Puede ser en el constructor
* Puede ser en algun evento OnShow/OnActivate

Me inclino mas por la primera. Pon un punto de ruptura en el constructor
Responder Con Cita
  #3  
Antiguo 11-07-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Belén.

Por el mensaje de error que mencionas, yo revisaría lo siguiente:
  • Eventos que pudieran dispararse entre sí provocando cíclos infinitos.
  • Métodos, funciones o procedimientos recursivos (si los estas usando).
  • El envío de argumentos con datos muy grandes.
  • Métodos muy amplios que se puedan estar llamando respectivamente.
  • El uso desmesurado de variables globales (muchas o muy extensas).
Como primer intento de solución incrementaría el stack desde el archivo .dpr del proyecto:
Código Delphi [-]
{$M 32768, 214748364}  //(16384 * 2 , 2147483647 div 10)
Pero probablemente resulte sólo en parchear el asunto, lo ideal es descubrir la causa que está provocando el desbordamiento de la pila.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 11-07-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Aparentemente es lo dicho antes por los compañeros, un bucle infinito, por ejemplo:
Código Delphi [-]
do while not(eof)
begin
  total := total + q.fieldbyname('suma').asfloat;
  q.next;  //  <- haber olvidado avanzar, por lo que nunca saldrá del bucle
end;
Responder Con Cita
  #5  
Antiguo 11-07-2016
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Cita:
Empezado por AgustinOrtu Ver Mensaje
Si pudiste activar los dos query sin problema, entonces el problema esta en el form

* Puede ser en el constructor
* Puede ser en algun evento OnShow/OnActivate

Me inclino mas por la primera. Pon un punto de ruptura en el constructor
De acuerdo con los compañeros. el problema es un bucle infinito y me adhiero al comentario de AgustinOrtu. Muestranos el codigo del constructor y si tienes programado algo en el OnShow/OnActive.


Revisa tambien que tu formulario tfListadosVentas no esté creado automátcamente desde el inicio (por si acaso)

Saludo,
Responder Con Cita
  #6  
Antiguo 13-07-2016
Belen12 Belen12 is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 29
Poder: 0
Belen12 Va por buen camino
Gracias Por responder

Cita:
Empezado por ecfisa Ver Mensaje
Hola Belén.

Por el mensaje de error que mencionas, yo revisaría lo siguiente:
  • Eventos que pudieran dispararse entre sí provocando cíclos infinitos.
  • Métodos, funciones o procedimientos recursivos (si los estas usando).
  • El envío de argumentos con datos muy grandes.
  • Métodos muy amplios que se puedan estar llamando respectivamente.
  • El uso desmesurado de variables globales (muchas o muy extensas).
Como primer intento de solución incrementaría el stack desde el archivo .dpr del proyecto:
Código Delphi [-]
{$M 32768, 214748364}  //(16384 * 2 , 2147483647 div 10)
Pero probablemente resulte sólo en parchear el asunto, lo ideal es descubrir la causa que está provocando el desbordamiento de la pila.

Saludos
Hola buenas noches. perdon si tarde en responder es por tema del trabajo no pude estar conectada,Bueno intentare explicar lo que tengo en la aplicacion:
*Solo poseo 3 formularios el de venta, el de productos, y finalmente el listado de ventas. Los cuales solo utilizo una variable que es el total para realizar las sumas de los sub totales luego lo demas lo manego con un TstringGrid

* En el Formulario tfListadodeVentas solo tengo los 2 dbGrid y nada mas. Ahora intentado sacar una linea en la llamada por ejemplo
Código Delphi [-]
fmodulo.qdetalle.Active:=true;

no abre directamente el formulario se queda cargando

luego lo que tu me recomiendas perdon no tengo mucho campo en delphi, con esta linea la verdad que no entiendo que hacer

Código Delphi [-]
{$M 32768, 214748364}  //(16384 * 2 , 2147483647 div 10)
Responder Con Cita
  #7  
Antiguo 13-07-2016
Belen12 Belen12 is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 29
Poder: 0
Belen12 Va por buen camino
Gracias

Cita:
Empezado por gatosoft Ver Mensaje
De acuerdo con los compañeros. el problema es un bucle infinito y me adhiero al comentario de AgustinOrtu. Muestranos el codigo del constructor y si tienes programado algo en el OnShow/OnActive.


Revisa tambien que tu formulario tfListadosVentas no esté creado automátcamente desde el inicio (por si acaso)

Saludo,

Hola. No tengo nada en esos eventos solo lo unico que toque fue asignarle a cada dbgrid su query. y Realizar la llamada desde el menu principal que el codigo era el siguiente

Código Delphi [-]
procedure TfPrincipal.Listado5Click(Sender: TObject);
begin
  fmodulo.qVentas.Active:=true;
  fmodulo.qdetalle.Active:=true;
  tfListadosVentas.Create(self).ShowModal;
end;
Responder Con Cita
  #8  
Antiguo 13-07-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Belen12.

Lo que te sugerí,
Código Delphi [-]
{$M 32768, 214748364}
incrementa el tamaño del stack. Y apuntaba al caso que hubieras echo un gran consumo de memoria en las declaraciones, pero por lo que comentas no es el caso.

Ahora me quedó una duda: ¿ El programa se queda colgado en,
Código Delphi [-]
fmodulo.qdetalle.Active:=true;
como mencionas en el mensaje #6 o en,
Código Delphi [-]
procedure TfPrincipal.Listado5Click(Sender: TObject);
begin
  fmodulo.qVentas.Active:=true;
  fmodulo.qdetalle.Active:=true;
  tfListadosVentas.Create(self).ShowModal;
end;
como aparece en el mensaje #7 ?

Por otro lado, ¿ Sabes como usar los puntos de interrupción(breakpoint) como te sugirió Agustin en el mensaje #2 ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 13-07-2016 a las 14:09:52.
Responder Con Cita
  #9  
Antiguo 13-07-2016
Belen12 Belen12 is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 29
Poder: 0
Belen12 Va por buen camino
Gracias

Hola buenas tardes. si lo de tu sugerencia no lo se hacer perdon lo de incrementar el tamaño del stark
Si exacto el programa se queda congelado en la linea

Código Delphi [-]
fmodulo.qdetalle.Active:=true;

con respeto a la interrupción(breakpoint) la se manejar mas o menos ahora mira lo que me sucede cuando ejecuto y quiero entrar al formulario me sale lo siguiente dejo una imagen para que se pueda apreciar mejor
http://www.subirimagenes.com/otros-delphii-9622519.html

Última edición por Casimiro Notevi fecha: 13-07-2016 a las 20:21:20.
Responder Con Cita
  #10  
Antiguo 13-07-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Belen12.

A ver, empecemos por mirar si fmodulo está creado al momento del llamado agregando una línea a tu código:
Código Delphi [-]
procedure TfPrincipal.Listado5Click(Sender: TObject);
begin
  if not Assigned(fmodulo) then raise Exception.Create('¡ fmodulo no ha sido creado aún !'); // <- esta línea
  fmodulo.qVentas.Active:=true;
  fmodulo.qdetalle.Active:=true;
  tfListadosVentas.Create(self).ShowModal;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 14-07-2016
Belen12 Belen12 is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 29
Poder: 0
Belen12 Va por buen camino
Gracias

Cita:
Empezado por ecfisa Ver Mensaje
Hola Belen12.

A ver, empecemos por mirar si fmodulo está creado al momento del llamado agregando una línea a tu código:
Código Delphi [-]
procedure TfPrincipal.Listado5Click(Sender: TObject);
begin
  if not Assigned(fmodulo) then raise Exception.Create('¡ fmodulo no ha sido creado aún !'); // <- esta línea
  fmodulo.qVentas.Active:=true;
  fmodulo.qdetalle.Active:=true;
  tfListadosVentas.Create(self).ShowModal;
end;

Saludos
Hola buenas noches, no me sigue saliendo el mismo error que presente en la imagen
Responder Con Cita
  #12  
Antiguo 14-07-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Bien, paso siguiente revisa que:
  • qVentas y qDetalle existan al momento de citarlos en tu código.
  • Si existe algún código en los eventos OnCreate, OnShow, OnActivate, etc. del TDataModule fmodulo.
  • Si lo hay en BeforeOpen, AfterOpen, BeforeScroll, AfterScroll, etc. de qVentas y qDetalle.
  • Lo mismo con los eventos OnDataChange, OnStateChange, OnUpdateData de los TDataSource asociados con los anteriores.
  • Por último controla los eventos OnCreate, OnShow, OnActivate, etc. de tfListadosVentas.
Si encuentras algo, pública el código por favor.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #13  
Antiguo 14-07-2016
Belen12 Belen12 is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 29
Poder: 0
Belen12 Va por buen camino
Hola

Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Bien, paso siguiente revisa que:
  • qVentas y qDetalle existan al momento de citarlos en tu código.
  • Si existe algún código en los eventos OnCreate, OnShow, OnActivate, etc. del TDataModule fmodulo.
  • Si lo hay en BeforeOpen, AfterOpen, BeforeScroll, AfterScroll, etc. de qVentas y qDetalle.
  • Lo mismo con los eventos OnDataChange, OnStateChange, OnUpdateData de los TDataSource asociados con los anteriores.
  • Por último controla los eventos OnCreate, OnShow, OnActivate, etc. de tfListadosVentas.
Si encuentras algo, pública el código por favor.

Saludos
Hola no existe ningun evento ni en qVentas, ni qDetalle, tampoco en los TDataModule. Y el tfListadosVentas no tengo ningun evento ya que solo cree el form y le agregue los dichos dbgrid
Responder Con Cita
  #14  
Antiguo 14-07-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Veo en tu imágen que el error que estas recibiendo es access violation y este se produce generalmente cuando intentas referenciar un objeto que aún no ha sido creado o ya fué liberado.

Dado que has manejado todo de forma visual... Lo único que se me ocurre es que revises en las opciones del proyecto si el TDataModule está en la lista de Auto-create forms. De no ser así, fmodulo no estaría disponible cuando lo llamas y se produciría un error del tipo access violation.

Si fuera el caso, la solución mas rápida es pasarlo de Available forms a Auto-create forms, desde el IDE de Delphi: Project > Options > Forms:



Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #15  
Antiguo 14-07-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cuando se me presentan este tipo de casos lo que hago es volver a reconstruir todo de a poco hasta que doy con el problema. Estas usando variables globales? Lo digo porque este tipo de cosas me pasaba muy a menudo cuando usaba las variables que me autocreaba el IDE para los form y datamodule, pero se reducio bastante cuando empece a hacerme cargo de los tiempo de vida de los objetos: en general, si en algun momento me equivoco, la excepcion es mas facil de localizar y solucionar
Responder Con Cita
  #16  
Antiguo 15-07-2016
Belen12 Belen12 is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 29
Poder: 0
Belen12 Va por buen camino
Hola

Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Veo en tu imágen que el error que estas recibiendo es access violation y este se produce generalmente cuando intentas referenciar un objeto que aún no ha sido creado o ya fué liberado.

Dado que has manejado todo de forma visual... Lo único que se me ocurre es que revises en las opciones del proyecto si el TDataModule está en la lista de Auto-create forms. De no ser así, fmodulo no estaría disponible cuando lo llamas y se produciría un error del tipo access violation.

Si fuera el caso, la solución mas rápida es pasarlo de Available forms a Auto-create forms, desde el IDE de Delphi: Project > Options > Forms:



Saludos
Hola en el auto create si tengo el fmodulo y el fprincipal. Luego los otros formularios los tengo al otro lado. Estaba revisando los query y las propiedades y el que da prolema es cuando asocio los master source de cada query. Creo que ahi esta el prolema por que si saco la relacion de uno ya entra al formulario sin prolema
Responder Con Cita
  #17  
Antiguo 15-07-2016
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Y que tal si pones el stacktrace cuando te sale el error?
__________________
El malabarista.
Responder Con Cita
  #18  
Antiguo 15-07-2016
Belen12 Belen12 is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 29
Poder: 0
Belen12 Va por buen camino
Hola

Cita:
Empezado por mamcx Ver Mensaje
Y que tal si pones el stacktrace cuando te sale el error?
hola disculpa si lo habia puesto en el msj #9 pase la imagen en forma de link ya que aun no me deja poner una imagen en los mensajes
te lo dejo aqui disculpa si no se vio
http://www.subirimagenes.com/otros-delphii-9622519.html
Responder Con Cita
  #19  
Antiguo 15-07-2016
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Eso no es un stackoverflow. Es un acces violation (ose, apuntar a una direccion invalida de memoria).

Lo que debe hacer es en el depurador parar justo en la linea.

Luego examina el valor de las variables/propiedades, Una de esas esta null.

Debes recorrer todo el arbol de:

Cita:
fmodulo.qdetalle.Active
Si esa es la linea del error (o la que sea), y revisar las propiedades internas y confirman que apuntan y enlazan todos los objetos..
__________________
El malabarista.
Responder Con Cita
  #20  
Antiguo 15-07-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Belen12 Ver Mensaje
hola disculpa si lo habia puesto en el msj #9 pase la imagen en forma de link ya que aun no me deja poner una imagen en los mensajes
te lo dejo aqui disculpa si no se vio
http://www.subirimagenes.com/otros-delphii-9622519.html
Claro que puedes poner imágenes.
Los enlaces que pones sí que no muestran imagen alguna.
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
Stack Overflow Guillermo80 Varios 10 01-06-2008 21:41:36
stack overflow juan francisco Varios 6 28-05-2008 22:26:15
Stack overflow aonarres API de Windows 5 29-02-2008 13:07:11
Stack Overflow agonzalez Varios 5 08-12-2006 22:26:46
Stack Overflow Mariana Varios 14 30-10-2003 11:37:47


La franja horaria es GMT +2. Ahora son las 13:12:30.


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