Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con un error.No hay manera (https://www.clubdelphi.com/foros/showthread.php?t=4432)

Descendents 15-10-2003 14:07:05

Ayuda con un error.No hay manera
 
Tengo una aplicación echa en delphi, que es de operaciones a una base de datos SQL, y cuando cierro la aplicación, me da el siguiente error.

Exception EBitsError in module Aplicacion.exe at 0001FB47
Bits index out of range.

el numero 0001FB47,puede variar, a veces es el 0001FB27 o algun otro.

Pero solo me lo da cuando cierro la aplicación.
Si alguien puede ayudarme por favor, se lo agradeceria mucho.No hay manera de saber porque me da este error.

Un saludo
Muchas gracias de antemano.

Viet 15-10-2003 14:38:44

Hola :

Tienes alguna operacion en los eventos de cierre de la aplicacion??? como OnFormClose o algun otro ???

Descendents 15-10-2003 15:08:06

Si tengo un insert en la base, pero este insert, no es, porque lo comento y me sigue dando error.

Y en el Data Module no tengo nada en el ondestroy.

Es como si algo se quedara tocado cuando estoy trabajando con la aplicación y al cerrar, me da el error.

Pero el programa me compila perfectamente, y mientras estoy trabajando con el no me da ni un error, y hace todo lo que tiene que hacer.

Es al cerrar la aplicación me salta este error.

Viet 15-10-2003 15:20:51

Yo creo que la unica manera de que quede trabajo pendiente al cerrar la aplicacion seria que tengas Threads, pero como no lo comentas lo dudo.

Ahora bien... obviamente el error esta en alguna instruccion que se desencadena al cerrar la aplicacion.... Estos eventos pueden ser onClose de un Form, de un datamodule, o bien al cerrar una conexion, o un dataset ... y otras cosas ...... yo en tu caso apuntaria por esos lados ... sino ves nada ... comenta que es lo que hace tu aplicacion y vemos que onda

Suerte ;)

delphi.com.ar 15-10-2003 16:56:31

Ese error suele darse cuando tienes un Objeto de la clase TBits, y asignas un Bit[n], donde n esta fuera del rango establecido por la propiedad Size.
Revisa tu código donde uses objetos de esta clase, o ejecuta tu proyecto con la opción Tools\Debugger Options\Language Exceptions\Stop on Delphi Exceptions como True.

Saludos!

Descendents 15-10-2003 18:02:54

Hola de nuevo.

No utilizo TBits en ningún momento.

He utilizado el Stop on delphi exceptions, y se me para al cerrar la aplicación, me da el mismo error, y a continuación se me cierra el programa.Con lo qual me pasa lo mismo que sin Stop on delphi exceptions.

Me he dado cuenta, que me pasa cuando he entrado a un determinado form de la aplicación.

Pero ese formulario lo creo y lo destruyo como todos los demás, y no tengo ningún problema, con los demás.

Lo curioso es que no me da el error con ese form, sino que me lo da cuando cierro la aplicación habiendo entrado a ese form.

No se, parce que en algún sitio intgerno de delphi, algo es incompatible a algo que hago dentro de ese form.

delphi.com.ar 15-10-2003 18:11:54

Cita:

Posteado originalmente por Descendents
He utilizado el Stop on delphi exceptions, y se me para al cerrar la aplicación, me da el mismo error, y a continuación se me cierra el programa.Con lo qual me pasa lo mismo que sin Stop on delphi exceptions.
El "Stop on delphi exceptions", no solucionará tu problema, te servirá para saber donde se produce este error. El error seguramente esta relacionado con un TBits, el tema es saber que utiliza esta clase, por ejemplo algún componente de terceros que estés utilizando, que al liberarse puede producir este problema.

Saludos!

roman 15-10-2003 18:26:32

Cita:

Posteado originalmente por Descendents
No utilizo TBits en ningún momento.
Esto llama la atención. Quizá estés usando alguna componente de terceros que hace un mal manejo de alguna variable de tipo TBits.

Algo que puedes intentar es marcar la opción

Project/Options/Compiler/Use Debug DCUs

abrir la unidad classes.pas del código fuente de Delphi, buscar el procedimiento TBits.Error, colocar un "breakpoint" en

raise EBitsError.CreateRes(@SBitsIndexError);

y correr tu aplicación.

Cuando cierres ésta y la ejecución se detenga en el "breakpoint" revisa la ventana "Call stack"`para intentar ver qué rutina generó la excepción.

// Saludos

roman 15-10-2003 18:33:43

Otra cosa (independiente de lo anterior):

En el momento en que salga la excepción y antes de cerrar el cuadro de mensaje, cámbiate al IDE de Delphi y abre

Search|FindError

y anota ahí la dirección que te marca el mensaje de la excepción (0001FB27 o similar)

Esto debe llevarte al punto del código que genera la excepción. Si te abre una ventana de CPU en lugar de código muy posiblemente sea lo que comentaba: alguna componente de terceros mal hecha o mal usada.

// Saludos

Descendents 16-10-2003 11:10:41

Buenas Gente
Muchas gracias por contestar.
Bueno he encontrado de donde viene el error.

Es muy curioso porque como ya dije,me da error solo si he entrado a un determinado formulario(le llamare Formulario X), y cuando cierro el formulario 1 (al salir de la aplicación) , pasa por el siguiente procedimiento

procedure TGlyphList.Delete(Index: Integer);
begin
if Used[Index] then
begin
Dec(FCount);
Used[Index] := False;
end;
end;

del pas Buttons.

Used = Tbits.

Tengo tres botones en el form1 que tiene glyph, son BitBtn.
Si les saco los graficos o sea los Glyph ya no me da error la aplicación.

me da error en la linea if Used[Index] then

Esto es algo interno de delphi, porque yo no he tocado nunca este pas.

Lo curioso es que tengo alguna aplicaciones, con glyph en el primer formulario y no me pasa esto.

Creo,que el formulario X debo hacer algo mal, o algo esta mal, y al salir de la aplicación y cargarse los bitbtn del form1, la lista interior de Glyphs del programa, cuando la va destruyendo, pues llega un momento que peta.

No se , de momento sacando los glyph de los bitbtn, ni un problema me da.Esta es la solución momentanea, pero claro esto no es una buena solución.

Muchas gracias a todos
Otro Saludo


La franja horaria es GMT +2. Ahora son las 10:10:42.

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