Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Desbordamiento de Pila (https://www.clubdelphi.com/foros/showthread.php?t=32922)

Durbed 21-06-2006 11:28:41

Error 'Desbordamiento de Pila' en SQL.Clear;
 
Houston Houston tenemos un problema, de repente la aplicacion sobre la que estoy trabajando me da un desbordamiento de pila, decir que el trozo de codigo donde se produce dicho desbordamiento ni es un bucle ni nada, es un simple If ... else ... y lo he puesto aqui, porque me pasa al hacer el SQL.Clear; a continuacion os pongo el fragmento de codigo donde salta el error:

Código Delphi [-]
  Begin
      PSubcategorias.Visible := True;
      LBSubCatDisp.Clear;
      //Cargo las subcategorias en la lista de disponibles
      With DMAgenda.IBQEjecutar Do
        Begin
          SQL.Clear; <--Error
          SQL.Add('Select distinct subcat from emails');
          Open;
          First;
          While not eof Do
            Begin
              LBSubCatDisp.Items.Add(FieldByName('subcat').AsString);
              Next;
            End;
          Close;
        End;
      LBSubCatDisp.Selected[0] := True;
      //Si no hay ninguna subcategoria, desactivo los botones
      If LBSubCatDisp.Count = 0 Then
        Begin
          BaddUnoSubCat.Enabled := False;
          BAddTodasSubCat.Enabled := False;
        End;
    End;

Para conectar con la base de datos utilizo los IBX que trae D7 y la version de firebird es la 1.5.2, como he dicho me ha estado funcionando hasta hoy que ha salido el error y no he introducido ninguna modificacion.

Un saludo y gracias

Durbed 21-06-2006 12:04:50

Pongo un circo y me crecen los enanos, el desbordamiento a desaparecido de igual forma que aparecio :eek:, bueno de todas formas si veis algo raro en el código me avisais, que seguro que le sale a un cliente y se mosquea :mad:

kuan-yiu 21-06-2006 16:42:12

Pues sí que he visto algo, aunque puede que no sea relevante: Haces el "clear" sin cerrar la base de datos. Yo, por precaución siempre la cierro antes.
Código Delphi [-]
  miBD.Close;
  miBD.SQL.Clear;
  miBD.SQL.Add('lo que sea');
// O cualquier otra cosa que pongas aquí.
  miBD.Open;

Además suelo asegurarme de que la consulta tiene datos antes de ejecutar cualquier tipo de bucle (lo sé, soy un poco maniática).

kuan-yiu 21-06-2006 16:48:18

Lo olvidaba... jejeje
A mí a veces también me da desbordamientos de memoria y se queda totalmente muerto. Creo que es del entorno de programación, no del programa en sí, porque me ha sucedido después de borrar una etiqueta del formulario o cambiar el nombre de una variable que aún no uso... Lo soluciono reiniciando el entorno de trabajo (santo remedio en Windows :D )

Durbed 21-06-2006 17:19:52

Gracias por contestar, pero dudo mucho que el hacer el clear con la base abierta afecte en algo, puesto que la propiedad SQL es un TString que almacena la consulta que se pasa al hacer el open o execSQL.

Por cierto no es del entorno porque me lo hace tambien el ejecutable al realizar una tarea (que implica a varios procedimientos en distintos modulos) unas tres o cuatro veces, por lo que deduzco que tengo algo que crece en cada ejecucion del proceso, pero no tengo ni idea de lo que sera, creia que era un TStringList pero le hago un Free despues de cada ejecucion del proceso y he comprobado con F7 que ejecuta dicha linea.

Tengo un IBQuery abierto continuamente en mi aplicacion y el proceso que provoca el desbordamiento de la pila recorre dicho Query con un While, pero no creo que eso me provoque el desbordamiento, no?

Un saludo y gracias.

Durbed 21-06-2006 20:05:31

El desbordamiento es aleatorio y sale con mucha frecuencia :mad:, necesito ayuda.


La franja horaria es GMT +2. Ahora son las 02:01:24.

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