Page 1 of 1

Duda con recordset y dialogo modal

Posted: Wed May 26, 2010 8:12 am
by jfafive
Hola amigos,

Otra vez les tengo que consultar una duda más bien de concepto que de sintaxis.
Mi caso es el siguiente:

Desde mi ventana principal (trabajo con MDI), llamo a una ventana MDICHILD que abre un dialogo NO MODAL.
Este dialogo muestra un XBrowse de una tabla.

El problema es que si despues de

Code: Select all

ACTIVATE DIALOG oDlg ...
Cierro el recordset

Code: Select all

oRs:Close()
Me genera error al moverme por el xbrowse pues se cerró el recordset al ser un dialogo de ejecución NO MODAL.

Mi pregunta es, ¿como puedo controlar el cierre del recordset?
Ya que ahora lo abro al iniciar el dialogo, pero no lo puedo cerrar.
No me gusta la idea de mantener abiertos los RS en toda la aplicación, sino que solo los abro
cuando los necesito.

Amigos, ya ven que no sé cómo decirle en qué momento puedo cerrar el recordset.
No conocia este problema hasta que tuve que empezar a trabajar con dialogos NO MODALES.

Cualquier idea o sugerencia, como siempre, será muy bien recibida.

Gracias y un saludo.
:roll:

Re: Duda con recordset y dialogo modal

Posted: Wed May 26, 2010 8:45 am
by anserkk

Code: Select all

ACTIVATE DIALOG oDlg VALID (oRs:Close(),.T.)
Regards
Anser

Re: Duda con recordset y dialogo modal

Posted: Mon Jun 07, 2010 6:13 am
by jfafive
Anser,

gracias por tu respuesta, pero al salir del dialogo, me genera un error del tipo:

Error description: Error ADODB.RecordSet/6 DISP_E_UNKNOWNNAME: RECORDCOUNT

El codigo que uso es este:

Code: Select all

ACTIVATE DIALOG oDlg NOWAIT VALID (oRs:Close, .T. )

Re: Duda con recordset y dialogo modal

Posted: Mon Jun 07, 2010 12:06 pm
by Marco Augusto
Yo uso lo siguiente con ventanas


ACTIVATE WINDOW oWND20 ON INIT oBRWNOTAENT:SETFOCUS() VALID(CNOTAENT())

FUNCTION CNOTAENT
oBRWNOTAENT:LCLOSEAREA()
IF oRNEN#NIL
IF oRNEN:STATE()=1
oRNEN:CLOSE()
ENDIF
ENDIF
RETURN( .T. )

Re: Duda con recordset y dialogo modal

Posted: Mon Jun 07, 2010 2:02 pm
by jfafive
Gracias Marco,

Lo probaré en cuanto pueda, a ver que tal va.

Re: Duda con recordset y dialogo modal

Posted: Tue Jun 08, 2010 5:00 am
by anserkk
Did you try bPostEnd (From FWH 10.2 onwards)

Code: Select all

oWnd:bPostEnd  := { || oRs:Close() }
* New: DATA bPostEnd of class TMdiChild in mdichild.prg:
Any code, mostly clean up code, to be executed after an mdichild window is closed can be assigned to this
codeblock. This is in contrast to bValid, which is executed before the window and all the controls are closed.
For example, it may be safer to close dbfs, recordsets, etc used by the controls in the bPostEnd codeblock
rather than in the bValid codeblock. bPostEnd is evaluated after the mdichild is closed, without any parameters.
Window object or any controls of the window should not be referred in this codeblock because they are no more
available when this codeblock is executed.
You may also read a very good example provided by Mr.Rao on the below given link

http://forums.fivetechsupport.com/viewt ... =3&t=18270

Regards
Anser