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.

DBBrowse y DataControls: visualizaci

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

DBBrowse y DataControls: visualizaci

Mensaje por programacion »

Hola a todos,
Tengo un problema al deshabilitar un browse. En el programa hemos dividido
la pantalla en dos: en la parte superior tengo un DBBrowse apuntando a un
dataset y en la parte de abajo tengo varios campos datacontrols para editar
detalles de la fila seleccionada en el browse.
Para evitar que el usuario cambie de fila mientras está editando en la
parte de abajo, deshabilito el browse y lo habilito cuando le da a alguno de
los botones guardar o cancelar (momento que aprovecho para hacer el Update o
Cancel en el dataset).
El funcionamiento es correcto, pero mientras el dataset está en modo Edit
y deshabilito el browse, varios campos calculados que tengo en el dataset
cambian, como si la función que calcula dichos campos no tuviera acceso a
los valores de la BBDD. Consiguientemente los valores de esos campos
calculados de muchas filas son incorrectos, y da lugar a confusión.
Hemos depurado los eventos de edición del dataset y actualización del
browse, y las funciones que asignamos para los campos calculados siempre
reciben los valores del registro que está seleccionado en ese momento, en
lugar de recibir los correspondientes de cada fila.
Por lo tanto, mientras el browse está deshabilitado los campos calculados
muestran en todas las filas los mismos valores que el registro seleccionado.
Al habilitar de nuevo el browse todo vuelve a la "normalidad".
Había pensado en solucionarlo deshabilitando los controles enlazados a la
BBDD (lUpdLinked) para que no actualizara el browse, pero el problema es que
los campos de la parte de abajo son datacontrols, y entonces podemos tener
problemas al actualizar la BBDD.
¿Cómo se puede solucionar esto?
Muchas gracias de antemano,
Javier Jiménez
P.D.: He intentado deshabilitar el browse tanto antes como después de entrar
en modo edición del dataset y el comportamiento es el mismo.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9440
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

DBBrowse y DataControls: visualizaci

Mensaje por ignacio »

Javier,
Si se fija en el ejemplo DBFData1, en el cual, el primer campo del browse es un campo cálculado, vera que el campo calculado está definido de la siguiente forma:
::oDbfDataSet1:AddCalcField( "FIRSTLAST", {|o| FirstLast( o ) } )
STATIC FUNCTION FirstLast( oDataField )
LOCAL cText
WITH OBJECT oDataField:oDataSet
cText := Trim( :First( dsFIELD ) ) + " " + Trim( :Last( dsFIELD ) )
END WITH
RETURN cText
Observe el texto en ROJO, que indica que independientemente de que esté o no en modo edición el dataset, el valor a recuperar siempre es el valor de la tabla y no de su buffer de edición. También podrí­a haber utilizado el método FieldGet() del dataset para conseguir el mismo efecto.
Para más información consulte el capí­tulo 'Introducción a los datacontrols' de la ayuda.
Un saludo,
--
Ignacio Ortiz de Zúñiga
[Soporte Xailer]
[Xailer support]
"Javier Jiménez" <programacion@microsur.es> escribió en el mensaje news:484d080b$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Hola a todos,
> Tengo un problema al deshabilitar un browse. En el programa hemos dividido
> la pantalla en dos: en la parte superior tengo un DBBrowse apuntando a un
> dataset y en la parte de abajo tengo varios campos datacontrols para editar
> detalles de la fila seleccionada en el browse.
>
> Para evitar que el usuario cambie de fila mientras está editando en la
> parte de abajo, deshabilito el browse y lo habilito cuando le da a alguno de
> los botones guardar o cancelar (momento que aprovecho para hacer el Update o
> Cancel en el dataset).
>
> El funcionamiento es correcto, pero mientras el dataset está en modo Edit
> y deshabilito el browse, varios campos calculados que tengo en el dataset
> cambian, como si la función que calcula dichos campos no tuviera acceso a
> los valores de la BBDD. Consiguientemente los valores de esos campos
> calculados de muchas filas son incorrectos, y da lugar a confusión.
>
> Hemos depurado los eventos de edición del dataset y actualización del
> browse, y las funciones que asignamos para los campos calculados siempre
> reciben los valores del registro que está seleccionado en ese momento, en
> lugar de recibir los correspondientes de cada fila.
>
> Por lo tanto, mientras el browse está deshabilitado los campos calculados
> muestran en todas las filas los mismos valores que el registro seleccionado.
> Al habilitar de nuevo el browse todo vuelve a la "normalidad".
>
> Habí­a pensado en solucionarlo deshabilitando los controles enlazados a la
> BBDD (lUpdLinked) para que no actualizara el browse, pero el problema es que
> los campos de la parte de abajo son datacontrols, y entonces podemos tener
> problemas al actualizar la BBDD.
>
> ¿Cómo se puede solucionar esto?
>
> Muchas gracias de antemano,
> Javier Jiménez
>
>
> P.D.: He intentado deshabilitar el browse tanto antes como después de entrar
> en modo edición del dataset y el comportamiento es el mismo.
>
>
--
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
programacion
Mensajes: 23
Registrado: Jue Dic 27, 2007 10:26 am

DBBrowse y DataControls: visualizaci

Mensaje por programacion »

Hola de nuevo,
Muchas gracias Ignacio. Ya funciona perfectamente. Había visto en la ayuda
los "modificadores" dsFIELD y dsVAR pero hasta ahora no lo había entendido
del todo. En este caso al entrar en modo edición necesito usar el valor del
campo en todo momento para el caso del browse. Entendido.
Gracias de nuevo,
Javier Jiménez
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:484d1500$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
Javier,
Si se fija en el ejemplo DBFData1, en el cual, el primer campo del browse es
un campo cálculado, vera que el campo calculado está definido de la
siguiente forma:
::oDbfDataSet1:AddCalcField( "FIRSTLAST", {|o| FirstLast( o ) } )
STATIC FUNCTION FirstLast( oDataField )
LOCAL cText
WITH OBJECT oDataField:oDataSet
cText := Trim( :First( dsFIELD ) ) + " " + Trim( :Last( dsFIELD ) )
END WITH
RETURN cText
Observe el texto en ROJO, que indica que independientemente de que esté o no
en modo edición el dataset, el valor a recuperar siempre es el valor de la
tabla y no de su buffer de edición. También podría haber utilizado el
método FieldGet() del dataset para conseguir el mismo efecto.
Para más información consulte el capítulo 'Introducción a los datacontrols'
de la ayuda.
Un saludo,
--
Ignacio Ortiz de Zúñiga
[Soporte Xailer]
[Xailer support]
"Javier Jiménez" <programacion@microsur.es> escribió en el mensaje
news:484d080b$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Hola a todos,
> Tengo un problema al deshabilitar un browse. En el programa hemos dividido
> la pantalla en dos: en la parte superior tengo un DBBrowse apuntando a un
> dataset y en la parte de abajo tengo varios campos datacontrols para
> editar
> detalles de la fila seleccionada en el browse.
>
> Para evitar que el usuario cambie de fila mientras está editando en la
> parte de abajo, deshabilito el browse y lo habilito cuando le da a alguno
> de
> los botones guardar o cancelar (momento que aprovecho para hacer el Update
> o
> Cancel en el dataset).
>
> El funcionamiento es correcto, pero mientras el dataset está en modo
> Edit
> y deshabilito el browse, varios campos calculados que tengo en el dataset
> cambian, como si la función que calcula dichos campos no tuviera acceso a
> los valores de la BBDD. Consiguientemente los valores de esos campos
> calculados de muchas filas son incorrectos, y da lugar a confusión.
>
> Hemos depurado los eventos de edición del dataset y actualización del
> browse, y las funciones que asignamos para los campos calculados siempre
> reciben los valores del registro que está seleccionado en ese momento, en
> lugar de recibir los correspondientes de cada fila.
>
> Por lo tanto, mientras el browse está deshabilitado los campos calculados
> muestran en todas las filas los mismos valores que el registro
> seleccionado.
> Al habilitar de nuevo el browse todo vuelve a la "normalidad".
>
> Había pensado en solucionarlo deshabilitando los controles enlazados a la
> BBDD (lUpdLinked) para que no actualizara el browse, pero el problema es
> que
> los campos de la parte de abajo son datacontrols, y entonces podemos tener
> problemas al actualizar la BBDD.
>
> ¿Cómo se puede solucionar esto?
>
> Muchas gracias de antemano,
> Javier Jiménez
>
>
> P.D.: He intentado deshabilitar el browse tanto antes como después de
> entrar
> en modo edición del dataset y el comportamiento es el mismo.
>
>
Responder