Duda con recordset y dialogo modal

Post Reply
jfafive
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella

Duda con recordset y dialogo modal

Post 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:
Javier,
FWH 8.04 2008
User avatar
anserkk
Posts: 1280
Joined: Fri Jun 13, 2008 11:04 am
Location: Kochi, India

Re: Duda con recordset y dialogo modal

Post by anserkk »

Code: Select all

ACTIVATE DIALOG oDlg VALID (oRs:Close(),.T.)
Regards
Anser
jfafive
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella

Re: Duda con recordset y dialogo modal

Post 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. )
Javier,
FWH 8.04 2008
Marco Augusto
Posts: 122
Joined: Wed Oct 12, 2005 1:03 pm
Location: Cuernacava, Morelos Mexico

Re: Duda con recordset y dialogo modal

Post 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. )
Marco Augusto Rodriguez Manzo
fwh 2020 Xharbour 1.2.3
MySQL 5.0.19 Fastreport

PERZO SOFT
Sistemas Personalizados
jfafive
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella

Re: Duda con recordset y dialogo modal

Post by jfafive »

Gracias Marco,

Lo probaré en cuanto pueda, a ver que tal va.
Javier,
FWH 8.04 2008
User avatar
anserkk
Posts: 1280
Joined: Fri Jun 13, 2008 11:04 am
Location: Kochi, India

Re: Duda con recordset y dialogo modal

Post 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
Post Reply