Página 1 de 1

DBBrowse y DataControls: visualizaci

Publicado: Lun Jun 09, 2008 12:38 pm
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.

DBBrowse y DataControls: visualizaci

Publicado: Lun Jun 09, 2008 1:33 pm
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.
>
>
--

DBBrowse y DataControls: visualizaci

Publicado: Mar Jun 10, 2008 9:16 am
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.
>
>