In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Error en Xailer

Foro público de Xailer en español
Responder
programacion
Mensajes: 23
Registrado: Jue Dic 27, 2007 10:26 am

Error en Xailer

Mensaje por programacion »

Hola a todos,
Espero que alguien pueda ayudarme con un problemilla:
Estoy intentando hacer una ventana (form) que sea de ayuda
para elegir un cliente de una tabla (para no tener que recordar el código).
Es la tí­pica ventana de Clipper usando DBEdit.
No sé si la manera en que estoy haciéndolo es la más correcta,
pero es la única que se me ocurre.
Uso un DBBrowse de Xailer al que le paso como objeto oDataSet una
variable global inicializada en AppData que ha sido abierta desde el
formulario principal (en esto no hay problema, lo he estado usando en
varias ventanas y todas hacen uso correcto de la base de datos DBF).
Para que os situéis un poco, pongo el código de inicialización del browse
de esta ventana de ayuda:
METHOD DBBrowseCreate( oSender ) CLASS TFormBusqueda
oSender:oDataSet := &datacli
oSender:aCols := {} // no ponemos ninguna columna, sólo las siguientes:
WITH OBJECT TDBBrwColumn():New( oSender )
:cHeader := "Cod"
:nWidth := 61
:oDataField := "NUMERO"
:Create()
END
WITH OBJECT TDBBrwColumn():New( oSender )
:cHeader := "Empresa / Nombre"
:nWidth := 163
:oDataField := "NOMBRE"
//:OnDataDblClick := "DBBrowse1DblClick"
:Create()
END
RETURN Nil
Los campos del browse se rellenan aparentemente bien, parece que podemos
elegir el cliente y luego asigno el código del que seleccionemos en una variable
global para actualizarlo en el formulario que llama a esta "auxiliar".
El problema es que intento hacer un Seek (con lSoftSeek = .t.) usando un TEdit
para buscar el nombre del cliente dentro de esa base de datos y buscar así­ el
que tenga el nombre más parecido. En el evento de pulsación de teclas del edit pongo:
METHOD Edit1KeyDown( oSender, nKey, nFlags ) CLASS TFormBusqueda
IF nKey == VK_RETURN
// seleccionamos el cliente actual
Pbusqueda := &datacli:NUMERO
::Close()
ELSEIF nKey == VK_ESCAPE
Pbusqueda := "" // cancelamos la búsqueda, no devolvemos ningún resultado
::Close()
ELSE // cualquier otra tecla
&datacli:Seek(::oEdit1:Value,.T.) // con lSoftSeek activo
::oDBBrowse:Refresh() // actualizar después de la búsqueda
ENDIF
RETURN Nil
Igualmente este procedimiento parece que en principio funciona.
El problema es cuando cierras la ventana, parece que otro browse que usa el
mismo dataset se corrompe, aun cuando yo guardo el estado:
METHOD FormInitialize( oSender ) CLASS TFormBusqueda
&datacli:SaveState(.T.)
&datacli:OrdSetFocus(2) // activar 2º indice (nombres)
RETURN Nil

//---------------------------------------------------------- --------------------

METHOD FormClose( oSender, lClose ) CLASS TFormBusqueda
&datacli:RestoreState(.T.)
&datacli:OrdSetFocus(1) // activar 1er indice (num. cliente)
RETURN Nil
El error que me da Xailer al cerrar este formulario de ayuda e intentar mostrar el otro
DBBrowse que usa el mismo de clientes, es el siguiente:
XAILER DBBrowse: TDataSet object is pointing to another TDBBrowse

Pero este error sale en el Debugger, no detiene el programa ni nada. Es bastante extraño.
Que yo sepa en ninguna parte del código excepto al principio se modifica los dataset.
Si alguien puede ayudarme se lo agradecerí­a mucho.
Gracias por todo,
Javier Jiménez

P.D.: Estamos evaluando Xailer y pronto procederemos a comprar la licencia...
He encontrado una "solución" a mi manera: después de cerrar la ventana de ayuda,
en el browse principal de clientes vuelvo a asignar el dataset: ::oDBBrowse1:oDataSet := ::oDbfDataClientes
Así­ evito el error del depurador, pero no creo que eso sea lo correcto: o yo hago algo mal (y llevo varios
dí­as dándole vueltas) o el problema es que Xailer no soporta varios Browses apuntando al mismo DataSet.
--
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9440
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Error en Xailer

Mensaje por ignacio »

Javier,
Ese mensaje le está diciendo que un dataset esta utilizando más de un Browse lo cual no es correcto. Cuando a un dataset se le asigna más de un browse se muestra dicho mensaje.
Un saludo,
--
Ignacio Ortiz de Zúñiga
[Soporte Xailer]
"Javier Jiménez" <programacion@microsur.es> escribió en el mensaje news:[email=47736fbe@ozsrv2.ozlan.local...]47736fbe@ozsrv2.ozlan.local...[/email]
Hola a todos,
Espero que alguien pueda ayudarme con un problemilla:
Estoy intentando hacer una ventana (form) que sea de ayuda
para elegir un cliente de una tabla (para no tener que recordar el código).
Es la tí­pica ventana de Clipper usando DBEdit.
No sé si la manera en que estoy haciéndolo es la más correcta,
pero es la única que se me ocurre.
Uso un DBBrowse de Xailer al que le paso como objeto oDataSet una
variable global inicializada en AppData que ha sido abierta desde el
formulario principal (en esto no hay problema, lo he estado usando en
varias ventanas y todas hacen uso correcto de la base de datos DBF).
Para que os situéis un poco, pongo el código de inicialización del browse
de esta ventana de ayuda:
METHOD DBBrowseCreate( oSender ) CLASS TFormBusqueda
oSender:oDataSet := &datacli
oSender:aCols := {} // no ponemos ninguna columna, sólo las siguientes:
WITH OBJECT TDBBrwColumn():New( oSender )
:cHeader := "Cod"
:nWidth := 61
:oDataField := "NUMERO"
:Create()
END
WITH OBJECT TDBBrwColumn():New( oSender )
:cHeader := "Empresa / Nombre"
:nWidth := 163
:oDataField := "NOMBRE"
//:OnDataDblClick := "DBBrowse1DblClick"
:Create()
END
RETURN Nil
Los campos del browse se rellenan aparentemente bien, parece que podemos
elegir el cliente y luego asigno el código del que seleccionemos en una variable
global para actualizarlo en el formulario que llama a esta "auxiliar".
El problema es que intento hacer un Seek (con lSoftSeek = .t.) usando un TEdit
para buscar el nombre del cliente dentro de esa base de datos y buscar así­ el
que tenga el nombre más parecido. En el evento de pulsación de teclas del edit pongo:
METHOD Edit1KeyDown( oSender, nKey, nFlags ) CLASS TFormBusqueda
IF nKey == VK_RETURN
// seleccionamos el cliente actual
Pbusqueda := &datacli:NUMERO
::Close()
ELSEIF nKey == VK_ESCAPE
Pbusqueda := "" // cancelamos la búsqueda, no devolvemos ningún resultado
::Close()
ELSE // cualquier otra tecla
&datacli:Seek(::oEdit1:Value,.T.) // con lSoftSeek activo
::oDBBrowse:Refresh() // actualizar después de la búsqueda
ENDIF
RETURN Nil
Igualmente este procedimiento parece que en principio funciona.
El problema es cuando cierras la ventana, parece que otro browse que usa el
mismo dataset se corrompe, aun cuando yo guardo el estado:
METHOD FormInitialize( oSender ) CLASS TFormBusqueda
&datacli:SaveState(.T.)
&datacli:OrdSetFocus(2) // activar 2º indice (nombres)
RETURN Nil

//---------------------------------------------------------- --------------------

METHOD FormClose( oSender, lClose ) CLASS TFormBusqueda
&datacli:RestoreState(.T.)
&datacli:OrdSetFocus(1) // activar 1er indice (num. cliente)
RETURN Nil
El error que me da Xailer al cerrar este formulario de ayuda e intentar mostrar el otro
DBBrowse que usa el mismo de clientes, es el siguiente:
XAILER DBBrowse: TDataSet object is pointing to another TDBBrowse

Pero este error sale en el Debugger, no detiene el programa ni nada. Es bastante extraño.
Que yo sepa en ninguna parte del código excepto al principio se modifica los dataset.
Si alguien puede ayudarme se lo agradecerí­a mucho.
Gracias por todo,
Javier Jiménez

P.D.: Estamos evaluando Xailer y pronto procederemos a comprar la licencia...
He encontrado una "solución" a mi manera: después de cerrar la ventana de ayuda,
en el browse principal de clientes vuelvo a asignar el dataset: ::oDBBrowse1:oDataSet := ::oDbfDataClientes
Así­ evito el error del depurador, pero no creo que eso sea lo correcto: o yo hago algo mal (y llevo varios
dí­as dándole vueltas) o el problema es que Xailer no soporta varios Browses apuntando al mismo DataSet.
--
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Responder