Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2010-12

forms enredados II

14 messages · 2 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Paola Bruccoleri

Hola a todos..
un access violation me est� enloqueciendo... :)
a ver si pueden orientarme. Les pongo el esquema de aperturas/cierres de forms en un ABM.
Si hago esto "tal cual":
entro abm, AGREGAR, CANCELAR (entonces vuelvo al abm), SALIR -> access violation

formppal:
========
   Application.CreateForm(TABM,ABM);
   ABM.ShowModal();

en ABM:
========
- onCreate:
Application.CreateForm(TDMPrincipal, DMPrincipal); (abro el datamodule con la conexi�n)
apertura de tablas

- onClose:
cierre de tablas
closeAction:= caFree; //como aca libero el form, no necesito hacer el freeandnil

- bot�n salir (un gradbutton)
close;
- bot�n agregar:  (es el formulario de agregar)
Application.CreateForm(TEditF03, EditF03);
EditF03.ShowModal;
- bot�n modificar: (es OTRO formulario parecido al de agregar)
Application.CreateForm(TEditF03b, EditF03b);
EditF03b.ShowModal;

en el form AGREGAR
==================
este form tiene ttables, datasources, tquerys; la conexion que uso esta en el dmprincipal
No hay m�s eventos de los que ac� se ponen...
- bot�n aceptar:
grabar (uso qrys con inserts que ejecuto con execsql close;

- bot�n cancelar:
close;
- onClose
closeAction:=caFree;

Reply by email

José Mejuto
to Paola Bruccoleri

Hello Paola,

Monday, December 20, 2010, 7:42:35 PM, you wrote:

PB> Hola a todos..
PB> un access violation me est� enloqueciendo... :) PB> a ver si pueden orientarme. Les pongo el esquema de aperturas/cierres de PB> forms en un ABM.
PB> Si hago esto "tal cual":
PB> entro abm, AGREGAR, CANCELAR (entonces vuelvo al abm), SALIR -> access PB> violation

PB> formppal:
PB> ========
PB>    Application.CreateForm(TABM,ABM);
PB>    ABM.ShowModal();

Despu�s del ShowModal no haces nada m�s ?

PB> en ABM:
PB> ========
PB> - onCreate:
PB> Application.CreateForm(TDMPrincipal, DMPrincipal); (abro el datamodule PB> con la conexi�n)
PB> apertura de tablas

PB> - onClose:
PB> cierre de tablas
PB> closeAction:= caFree; //como aca libero el form, no necesito hacer el PB> freeandnil

FreeAndNil de qu� ?

Abre una ventana de linea de comandos y lanza el gdb (el que est� en Lazarus, no recuerdo la carpeta):

C:\MiCarpeta\> gdb miprograma.exe

r

Haz lo que tengas que hacer, y cuando de el access violation:

bt

Eso te dar� un listado de llamadas hasta la que obtuvo el error e orden inverso. Probablemente la primera de la linea y 3 o 4 m�s ser�n el SYSTEM$FREE o algo parecido, sin informaci�n de debug, pero m�s abajo deber�a de salirte la linea que causa el problema, o bien acabar en algo como:

$00000000

Lo que quiere decir que en alg�n punto has accedido a un objeto el cual era "nil", y en ese caso tendr�s que ir "paso a paso" en la ejecuci�n.

Si te parece pega aqu� el resultado del comando "bt" del gdb.

Best regards, Jos�

Reply by email

Paola Bruccoleri
to José Mejuto

El 20/12/2010 05:03 p.m., Jos� Mejuto escribi�:

Show quoted text 19 lines
Hello Paola, Monday, December 20, 2010, 7:42:35 PM, you wrote: PB> Hola a todos.. PB> un access violation me est� enloqueciendo... :) PB> a ver si pueden orientarme. Les pongo el esquema de aperturas/cierres de PB> forms en un ABM. PB> Si hago esto "tal cual": PB> entro abm, AGREGAR, CANCELAR (entonces vuelvo al abm), SALIR -> access PB> violation PB> formppal: PB> ======== PB> Application.CreateForm(TABM,ABM); PB> ABM.ShowModal(); Despu�s del ShowModal no haces nada m�s ?

no.. es una opci�n de men�: creo y showmodal

Show quoted text 13 lines
PB> en ABM: PB> ======== PB> - onCreate: PB> Application.CreateForm(TDMPrincipal, DMPrincipal); (abro el datamodule PB> con la conexi�n) PB> apertura de tablas PB> - onClose: PB> cierre de tablas PB> closeAction:= caFree; //como aca libero el form, no necesito hacer el PB> freeandnil FreeAndNil de qu� ?

quise decir que no puse el freeandnil despu�s del showmodal..

Si te parece pega aqu� el resultado del comando "bt" del gdb.

ac� va el "chanchullo" que sale.. por lo menos lo �ltimo..

Program received signal SIGSEGV, Segmentation fault. 0x004372d6 in TAPPLICATION__DOIDLEACTIONS (this=0x21a448) at ./include/application.inc:980
980 if AForm.FormStyle=fsSplash then
Current language: auto; currently pascal
(gdb) bt
#0 0x004372d6 in TAPPLICATION__DOIDLEACTIONS (this=0x21a448) at ./include/application.inc:980
#1 0x004361ee in TAPPLICATION__IDLE (WAIT=true, this=0x21a448) at ./include/application.inc:382
#2 0x00437a7f in TAPPLICATION__HANDLEMESSAGE (this=0x21a448) at ./include/application.inc:1227
#3 0x00437e8f in TAPPLICATION__RUNLOOP (this=0x21a448) at ./include/application.inc:1359
#4 0x00447203 in TWIDGETSET__APPRUN (ALOOP=0x437e50 <TAPPLICATION__RUNLOOP>,
this=0x222460) at ./include/interfacebase.inc:49
#5 0x00437e45 in TAPPLICATION__RUN (this=0x21a448) at ./include/application.inc:1347
#6 0x00402ece in main () at Serviam.lpr:47
(gdb)

Ahora estaba mirando, que si cambio en el onClose del ABM esto que puse:

cierre de tablas
closeAction:= caFree; //como aca libero el form, no necesito hacer el freeandnil

por esto:
cierre de tablas
close;

no me sale el access violation

Reply by email

José Mejuto
to Paola Bruccoleri

Hello Paola,

you wrote
> Despu�s del ShowModal no haces nada m�s ?

PB> no.. es una opci�n de men�: creo y showmodal

Vale... Pero si es "ShowModal" puedes liberarlo despu�s del modal, sin tener que meterte en lo del caFree.

PB> Program received signal SIGSEGV, Segmentation fault. PB> 0x004372d6 in TAPPLICATION__DOIDLEACTIONS (this=0x21a448) PB> at ./include/application.inc:980
PB> 980 if AForm.FormStyle=fsSplash then PB> Current language: auto; currently pascal
PB> (gdb) bt
PB> #0 0x004372d6 in TAPPLICATION__DOIDLEACTIONS (this=0x21a448) PB> at ./include/application.inc:980
PB> #1 0x004361ee in TAPPLICATION__IDLE (WAIT=true, this=0x21a448) PB> at ./include/application.inc:382
PB> #2 0x00437a7f in TAPPLICATION__HANDLEMESSAGE (this=0x21a448) PB> at ./include/application.inc:1227
PB> #3 0x00437e8f in TAPPLICATION__RUNLOOP (this=0x21a448) PB> at ./include/application.inc:1359
PB> #4 0x00447203 in TWIDGETSET__APPRUN (ALOOP=0x437e50 PB> <TAPPLICATION__RUNLOOP>,
PB> this=0x222460) at ./include/interfacebase.inc:49 PB> #5 0x00437e45 in TAPPLICATION__RUN (this=0x21a448) PB> at ./include/application.inc:1347
PB> #6 0x00402ece in main () at Serviam.lpr:47
PB> (gdb)

A ver, ahora intento explicarte que significa eso :) Lo primero que parece un bug en la LCL, no un fallo tuyo, aunque posiblemente por un uso extra�o (en el sentido de poco habitual) del form.

Tu form recibe el onclose, le dices que haga un "caFree", as� que cuando acaba la rutina, la LCL libera el form (le hace un free). Hasta aqu� todo bien, pero resulta que misteriosamente el mismo form que ha sido destruido recibe un mensaje (posiblemente uno enviado con PostMessage) para �l, y la LCL al decirle que lo procese, KBOOM! ya que el form ya no existe.

Esto puede ser debido al uso de caFree en un ShoModal, y quiz� combinado con el uso de un timer, o algo que provoca el envio de mensajes as�ncronos. Desde luego ser� usa cosa complicada de "debuggar" ya que tendr�as que hacerlo tu a menos que consiga sintetizar un ejemplo m�nimo que provoque el mismo fallo.

Hazme un favor, provoca el crash otra vez, cuando te de el "SIGSEGV" dale a OK, vete a "Ver -> Debug -> Call stack" (no se como lo pone en espa�ol), busca la linea del stack que pone
TAPPLICATION__DOIDLEACTIONS, dale doble click, y luego click derecho y selecciona la opci�n de, uy no recuerdo el nombre, la tercera opci�n, que hace que en esa linea se ponga una flechita de color azul claro. Ahora deber�as poder inspeccionar el valor de las variables, a ver si ves una que se llame algo as� como "message", o "LMessage" o algo as�, que me de una pista del mensaje que est� provocando el estropicio.

PB> Ahora estaba mirando, que si cambio en el onClose del ABM esto que puse: PB> cierre de tablas
PB> closeAction:= caFree; //como aca libero el form, no necesito hacer el PB> freeandnil
PB> por esto:
PB> cierre de tablas
PB> close;
PB> no me sale el access violation

Por que el form no se libera, se queda ocupando memoria. Puedes liberarlo despu�s del ShowModal.

Best regards, Jos�

Reply by email

Paola Bruccoleri
to José Mejuto

El 20/12/2010 06:51 p.m., Jos� Mejuto escribi�:

Show quoted text 5 lines
PB> no.. es una opci�n de men�: creo y showmodal Vale... Pero si es "ShowModal" puedes liberarlo despu�s del modal, sin tener que meterte en lo del caFree.

ok.. eso viene de una constumbre "delphiera" de un amigo !!! Entre trantas y tantas pruebas que hice, creo recordar que cambi� todos los closeAction:= caFree por close, y luego del showmodal hac�a el freeandnil del mismo, y tb me daba problemas.!

Esto puede ser debido al uso de caFree en un ShoModal, y quiz� combinado con el uso de un timer, o algo que provoca el envio de mensajes as�ncronos.

si, efectivamente en el formppal hay un timer que uso para mostrar la fecha y hora.

Show quoted text 10 lines
Hazme un favor, provoca el crash otra vez, cuando te de el "SIGSEGV" dale a OK, vete a "Ver -> Debug -> Call stack" (no se como lo pone en espa�ol), busca la linea del stack que pone TAPPLICATION__DOIDLEACTIONS, dale doble click, y luego click derecho y selecciona la opci�n de, uy no recuerdo el nombre, la tercera opci�n, que hace que en esa linea se ponga una flechita de color azul claro. Ahora deber�as poder inspeccionar el valor de las variables, a ver si ves una que se llame algo as� como "message", o "LMessage" o algo as�, que me de una pista del mensaje que est� provocando el estropicio.

comienzo a intentar........
.......

llego a esto:

al darle dobleclic a la primera l�nea, va a la l�nea naranja del c�digo.. y ah� no se que dato te puedo copiar..

Show quoted text 12 lines
PB> Ahora estaba mirando, que si cambio en el onClose del ABM esto que puse: PB> cierre de tablas PB> closeAction:= caFree; //como aca libero el form, no necesito hacer el PB> freeandnil PB> por esto: PB> cierre de tablas PB> close; PB> no me sale el access violation Por que el form no se libera, se queda ocupando memoria. Puedes liberarlo despu�s del ShowModal.

claro.. pens� lo mismo...despu�s del showmodal puse el freeandnil y tb explota!!.. no de primera, pero si lo hago 2 o 3 veces seguidas, o sea, entro, salgo, entro, salgo... KBOOM!!
Tambi�n creo recordar que saqu� TODOS los closeAction:= caFree por close y hac�a el freeandnil luego de cada showmodal, y tb me pasaba lo mismo! Cu�l ser�a entonces la forma "m�s normal" de hacerla aqu�? as� pruebo nuevamente..

chauuuuuuuuuu

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20101220/5fa7062d/attachment-0001.html> ------------ pr�xima parte ------------
A non-text attachment was scrubbed...
Name: moz-screenshot-1.png
Type: image/png
Size: 25181 bytes
Desc: no disponible
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20101220/5fa7062d/attachment-0001.png>

Reply by email

Paola Bruccoleri
to José Mejuto: PB> no.. es una opci�n de men�: creo y showmodal Vale... Pero si es "ShowModal"…

El 20/12/2010 06:51 p.m., Jos� Mejuto escribi�:

Show quoted text 9 lines
Hello Paola, Monday, December 20, 2010, 8:49:48 PM, you wrote: >> Despu�s del ShowModal no haces nada m�s ? PB> no.. es una opci�n de men�: creo y showmodal Vale... Pero si es "ShowModal" puedes liberarlo despu�s del modal, sin tener que meterte en lo del caFree.

prob� ahora de no usar los cafree y liberar los forms correspondientes luego del showmodal y pasa lo mismo..!!
y se detiene en la MISMA PARTE!!, o sea, en el c�digo que te captur� anteriormente..

Reply by email

José Mejuto
to Paola Bruccoleri: El 20/12/2010 06:51 p.m., Jos� Mejuto escribi�: ok.. eso viene de una constumbre…

Hello Paola,

Monday, December 20, 2010, 10:32:55 PM, you wrote:

PB> al darle dobleclic a la primera l�nea, va a la l�nea naranja del PB> c�digo.. y ah� no se que dato te puedo copiar..

Intentar� sacar alguna pista del bt que mandaste.

> Por que el form no se libera, se queda ocupando memoria. Puedes > liberarlo despu�s del ShowModal.

PB> claro.. pens� lo mismo...despu�s del showmodal puse el freeandnil y tb PB> explota!!.. no de primera, pero si lo hago 2 o 3 veces seguidas, o sea, PB> entro, salgo, entro, salgo... KBOOM!!
PB> Tambi�n creo recordar que saqu� TODOS los closeAction:= caFree por close PB> y hac�a el freeandnil luego de cada showmodal, y tb me pasaba lo mismo! PB> Cu�l ser�a entonces la forma "m�s normal" de hacerla aqu�? as� pruebo PB> nuevamente..

La segunda ser�a la "m�s correcta" ya que tienes controlada la "vida del form" al ser mostrado con modal.

El truco para pillar estos bugs es conseguir saber que mensaje nos est� haciendo explotar todo. Cuando en el bt (backtrace) lo m�s lejos que podemos llegar es un RUN_LOOP, PROCESSMESSAGES, HANDLEMESSAGE o alguna funci�n con un nombre parecido, el culpable en el 80% de los casos es un timer ya que es casi el �nico modo de que llegue un mensaje justo en el momento menos oportuno.

Comprueba lo que haces en el timer, y como prueba desact�valo. Si al desactivarlo todo funciona es que algo muy raro est� pasando.

Yo voy a hacer un par de pruebas con showmodal a ver si consigo que explote.

Best regards, Jos�

Reply by email

Paola Bruccoleri
to José Mejuto

El 20/12/2010 07:45 p.m., Jos� Mejuto escribi�:

Comprueba lo que haces en el timer, y como prueba desact�valo. Si al desactivarlo todo funciona es que algo muy raro est� pasando.

desactiv� el timer y pasa lo mismo! todo mal :(, SIGSEGV..

mi versi�n de lazarus es esta:
Lazarus 0.9.29 r27550 FPC 2.5.1 i386-win32-win32/win64

Reply by email

José Mejuto
to Paola Bruccoleri: El 20/12/2010 06:51 p.m., Jos� Mejuto escribi�: prob� ahora de no usar los cafree y…

Hello Paola,

you wrote
> Vale... Pero si es "ShowModal" puedes liberarlo despu�s del modal, sin > tener que meterte en lo del caFree.

PB> prob� ahora de no usar los cafree y liberar los forms correspondientes PB> luego del showmodal y pasa lo mismo..!!
PB> y se detiene en la MISMA PARTE!!, o sea, en el c�digo que te captur� PB> anteriormente..

No consigo reproducir el error, as� que s�lo me queda especular.

Para empezar, si me lo permites vamos a cambiar algunas cosas del estilo de programaci�n, ya que conllevan errores frecuentes:

1) Application.CreateForm s�lo se usa con formularios o datamodules que van a ser creados al principio de la aplicaci�n y que s�lo se destruir�n despu�s de cerrar la �ltima ventana, o en un "Application.Terminate". Resumiendo, lo podemos usar en el .lpr y en el resto de casos a menos que estemos seguros 100% de lo que hacemos no usarlo.

2) Para crear los forms, especialmente los que vamos a mostrar con ShowModal de este modo:

procedure Form3.XXXXXXX;
var
  NewForm: TForm4;
begin
  NewForm:=TForm4.Create(Self);
  NewForm.ShowModal;
  NewForm.Free;
end;

Donde NewForm NO es la variable global asociada a TForm4.

3) No usaremos caFree en los form que vayan a ser modal por definici�n.

4) Para crear un form que no va a ser modal, lo crearemos igual que en el punto 2, pero no pondremos el "NewForm.Free", en su lugar activaremos el caFree en el OnClose. Ojo! al crearlo de este modo, al hacer un Free del form3, el form4 se cerrar� autom�ticamente.

Resumiendo, que tenemos que tener controlado el ciclo de vida de cada formulario. Si un formulario depende �nica y exclusivamente de la presencia anterior de otro, haremos que este sea el "Owner" del que creamos, de modo que en una secuencia de creaci�n nos queda un �rbol:

form1 |-> form2 -> form4
|-> form3 |-> form5
|-> form6

De este modo, si le decimos (como sea) a form1 que se cierre, autom�ticamente �l cerrar� todos los form hijos, o sea, form2 y form3, a su vez form2 cerrar� form4, y form3 cerrar� form5 y form6.

Tal y como tu lo haces, "Application" controla la vida de todos los formularios, y aunque eso no tiene por qu� causar ning�n problema, si que hace el control del flujo m�s complicado y dif�cil de evaluar.

Ah! se me olvidaba, y quiz� lo m�s importante, los datamodules. Cuando crees estos, aseg�rate de que no lo haces dos veces!, para ello haz lo de:

if Assigned(Datamodule) then
  DataModule:=TDataModule.Create(Application);

Y aseg�rate que cuando se destruye (si es que lo haces) de que lo destruyes SIEMPRE con FreeAndNil(DataModule).

Best regards, Jos�

Reply by email

José Mejuto
to Paola Bruccoleri: El 20/12/2010 07:45 p.m., Jos� Mejuto escribi�: desactiv� el timer y pasa lo mismo!…

Hello Paola,

Monday, December 20, 2010, 11:23:45 PM, you wrote:

PB> El 20/12/2010 07:45 p.m., Jos� Mejuto escribi�:

> > Comprueba lo que haces en el timer, y como prueba desact�valo. Si al > desactivarlo todo funciona es que algo muy raro est� pasando.

PB> desactiv� el timer y pasa lo mismo! todo mal :(, SIGSEGV..

PB> mi versi�n de lazarus es esta:
PB> Lazarus 0.9.29 r27550 FPC 2.5.1 i386-win32-win32/win64

Uy, pensaba que usabas SVN m�s reciente. Actualiza por favor, hay un bug en esa zona que ha sido resuelto en 27602 y que puede perfectamente afectar a tu problema.

Si quieres puedes s�lo actualizar:

lazarus\lcl\include\application.inc

Ya que es el fichero que contiene el cambio. Luego recompila la LCL usando la opci�n de la escoba y la rueda dentada, para que recompile toda la LCL. Vamos que vuelto a ver el cambio me juego las habichuelas :) a que se soluciona tu problema.

Best regards, Jos�

Reply by email

Paola Bruccoleri
to José Mejuto

El 20/12/2010 08:36 p.m., Jos� Mejuto escribi�:

Show quoted text 10 lines
Si quieres puedes s�lo actualizar: lazarus\lcl\include\application.inc Ya que es el fichero que contiene el cambio. Luego recompila la LCL usando la opci�n de la escoba y la rueda dentada, para que recompile toda la LCL. Vamos que vuelto a ver el cambio me juego las habichuelas :) a que se soluciona tu problema.

Hola Jos�..
bueno, he de decirte que has ganado!!.... por lo pronto, y como primera prueba antes de ponerme a actualizar todo el lazarus, cambiar la forma de abrir forms, etc... hice eso que me sugieres. Aparentemente ya no sale el access violation... !!!... de todas formas, voy a seguir probando xq a veces no me pasaba de primera sino despu�s de entrar/salir a varios lados (sin hacer nada.. ) o sea, era solo apertura/cierre de forms..

Trato de actualizar el lazarus/fpc cada 2 meses aprox, porque realmente me lleva tiempito y sinceramente, hasta me da p�nico :) de que se me quede peor de lo que estaba!! jajajaj.. claro que puedo volver atr�s, pero......

De nuevo mi eterno agradecimiento por tus sabias "clases", que guardo y siempre releo..!!
byeeeeeeeeeeeeee

Reply by email

José Mejuto
to Paola Bruccoleri

Hello Paola,

you wrote 6 lines
> lazarus\lcl\include\application.inc > Ya que es el fichero que contiene el cambio. Luego recompila la LCL > usando la opci�n de la escoba y la rueda dentada, para que recompile > toda la LCL. Vamos que vuelto a ver el cambio me juego las habichuelas > :) a que se soluciona tu problema. >

PB> Hola Jos�..
PB> bueno, he de decirte que has ganado!!.... por lo pronto, y como primera PB> prueba antes de ponerme a actualizar todo el lazarus, cambiar la forma PB> de abrir forms, etc... hice eso que me sugieres. Aparentemente ya no PB> sale el access violation... !!!... de todas formas, voy a seguir PB> probando xq a veces no me pasaba de primera sino despu�s de PB> entrar/salir a varios lados (sin hacer nada.. ) o sea, era solo PB> apertura/cierre de forms..
PB> Trato de actualizar el lazarus/fpc cada 2 meses aprox, porque realmente PB> me lleva tiempito y sinceramente, hasta me da p�nico :) de que se me PB> quede peor de lo que estaba!! jajajaj.. claro que puedo volver atr�s, PB> pero......

Pues actualiza s�lo ese archivo, no deber�a tener efectos "maliciosos" en otras partes. Simplemente corrige un error t�pico que cometemos todos de vez en cuando. El c�digo antiguo hacia un bucle de 0 hasta formcount-1 para procesar informaci�n de los form, pero claro, si al procesar informaci�n del primero cerramos el �ltimo por ejemplo, intentar� procesarse uno al final que ya no existe. El nuevo c�digo reevalua formcount con un "do while", de este modo la informaci�n de la cantidad de forms siempre es correcta.

PB> De nuevo mi eterno agradecimiento por tus sabias "clases", que guardo y PB> siempre releo..!!

No tan sabias :)

Best regards, Jos�

Reply by email

Paola Bruccoleri
to José Mejuto

El 21/12/2010 11:22 a.m., Jos� Mejuto escribi�:

Hola Jos�..

Show quoted text 8 lines
Pues actualiza s�lo ese archivo, no deber�a tener efectos "maliciosos" en otras partes. Simplemente corrige un error t�pico que cometemos todos de vez en cuando. El c�digo antiguo hacia un bucle de 0 hasta formcount-1 para procesar informaci�n de los form, pero claro, si al procesar informaci�n del primero cerramos el �ltimo por ejemplo, intentar� procesarse uno al final que ya no existe. El nuevo c�digo reevalua formcount con un "do while", de este modo la informaci�n de la cantidad de forms siempre es correcta.

otra pregunta t�cnica...

Estoy viendo el c�digo y no se porqu� se me colaron 2 closes que creo que no van, y a pesar de que los saqu� y es como si no pasara nada, quiero saber las consecuencias.

en ese abm, en el form de agregar (y en el de modificar), tanto en el bot�n de aceptar o cancelar (son unos tgradbutton) al final termino con un close; y luego en el evento onClose, cierro las tablas y tb tengo un close;
Yo creo que este �ltimo close est� de m�s y no se porqu� no salt� un error...

chauuuuuuuu

Reply by email

José Mejuto
to Paola Bruccoleri

Hello Paola,

you wrote
> reevalua formcount con un "do while", de este modo la informaci�n de > la cantidad de forms siempre es correcta.

PB> otra pregunta t�cnica...
PB> Estoy viendo el c�digo y no se porqu� se me colaron 2 closes que creo PB> que no van, y a pesar de que los saqu� y es como si no pasara nada, PB> quiero saber las consecuencias.
PB> en ese abm, en el form de agregar (y en el de modificar), tanto en el PB> bot�n de aceptar o cancelar (son unos tgradbutton) al final termino con PB> un close; y luego en el evento onClose, cierro las tablas y tb tengo un PB> close;
PB> Yo creo que este �ltimo close est� de m�s y no se porqu� no salt� un PB> error...

Est� de m�s, pero no es un error. Digamos que es un error l�gico pero no sint�ctico. El compilador no detecta errores l�gicos, exceptuando una peque�a cantidad de ellos, y a�n as� son "warnings" (unreachable code, variable not initialized...).

Best regards, Jos�

Reply by email