Hola,
En el proyecto que os dejo, hay dos dbbrowses cada uno con su memdataset
(con los mismos datos). Encima de cada dbbrowse hay un botón que hace un
borrado de todos los elementos. El de la izquierda tiene lUpdLinked := .T.
y el de la derecha .F. El algoritmo es el mismo, pero el resultado _visual_
es diferente.
Saludos,
José Luis Capel
Attached files pruebas6.zip (5 KB)Â
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.
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.
Diferencias en dbBrowse cuando lUpdLinked := .T./.F.
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Diferencias en dbBrowse cuando lUpdLinked := .T./.F.
José Luis,
Sin ver tu ejemplo, no entiendo lo que quieres demostrar. Obviamente si
lUpdLinked es falso TODOS los controles que dependen de dicho dataset,
incluido el DbBrowse, no se entrerán de las operaciones que hagas y por lo
tanto es completamente normal que el resultado visual sea diferente.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:4512af1d$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>
> Hola,
>
> En el proyecto que os dejo, hay dos dbbrowses cada uno con su memdataset
> (con los mismos datos). Encima de cada dbbrowse hay un botón que hace un
> borrado de todos los elementos. El de la izquierda tiene lUpdLinked :=
> .T.
> y el de la derecha .F. El algoritmo es el mismo, pero el resultado
> _visual_
> es diferente.
>
> Saludos,
> José Luis Capel
>
>
>
>
>
Sin ver tu ejemplo, no entiendo lo que quieres demostrar. Obviamente si
lUpdLinked es falso TODOS los controles que dependen de dicho dataset,
incluido el DbBrowse, no se entrerán de las operaciones que hagas y por lo
tanto es completamente normal que el resultado visual sea diferente.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:4512af1d$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>
> Hola,
>
> En el proyecto que os dejo, hay dos dbbrowses cada uno con su memdataset
> (con los mismos datos). Encima de cada dbbrowse hay un botón que hace un
> borrado de todos los elementos. El de la izquierda tiene lUpdLinked :=
> .T.
> y el de la derecha .F. El algoritmo es el mismo, pero el resultado
> _visual_
> es diferente.
>
> Saludos,
> José Luis Capel
>
>
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Diferencias en dbBrowse cuando lUpdLinked := .T./.F.
Ignacio,
Gracias por tu respuesta.
> Sin ver tu ejemplo, no entiendo lo que quieres demostrar. Obviamente si
> lUpdLinked es falso TODOS los controles que dependen de dicho dataset,
> incluido el DbBrowse, no se entrerán de las operaciones que hagas y por
> lo
> tanto es completamente normal que el resultado visual sea diferente.
>
Mira el ejemplo y verás lo que ocurre.
Saludos,
José Luis Capel
Gracias por tu respuesta.
> Sin ver tu ejemplo, no entiendo lo que quieres demostrar. Obviamente si
> lUpdLinked es falso TODOS los controles que dependen de dicho dataset,
> incluido el DbBrowse, no se entrerán de las operaciones que hagas y por
> lo
> tanto es completamente normal que el resultado visual sea diferente.
>
Mira el ejemplo y verás lo que ocurre.
Saludos,
José Luis Capel
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Diferencias en dbBrowse cuando lUpdLinked := .T./.F.
José Luis,
Es completamente normal, porque cuando navegas por el DBGrid, este, lo único
que hace es notificar a su DataSet de las operaciones de navegación. El
dataset realiza operación solicitada y se lo vuelve a tranmitir a todos los
DataControls incluido el DBGrid. Para que lo entiendas, el DBGrid no tiene
ni idea de como hacer un SKIP. La operación realmente la hace el DataSet,
pero el DbBrowse no asume ningún tipo de cambio en su visualización.
Posteriormente es el DataSet el que notifica al Browse de la operación, y
este reacciona. Es un poco enrevesado, pero tiene que ser así.
Si quitas el lUPdLinked pues entonces paso lo que te ocurre y es que el
Browse se queda muerto y no responde a las operaciones de navegación sobre
si mismo.
La propiedad lUpdLinked a FALSO está pensanda precisamente para que los
DataControls NO SE ENTEREN de ciertos movimientos en el Dataset, como por
ejemplo, realizar un Seek en la misma tabla que se hace un browse para
comprobar una clave primaria.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=4512c472@news.xailer.com...]4512c472@news.xailer.com...[/email]
> Ignacio,
>
> Gracias por tu respuesta.
>
>> Sin ver tu ejemplo, no entiendo lo que quieres demostrar. Obviamente si
>> lUpdLinked es falso TODOS los controles que dependen de dicho dataset,
>> incluido el DbBrowse, no se entrerán de las operaciones que hagas y por
>> lo
>> tanto es completamente normal que el resultado visual sea diferente.
>>
>
> Mira el ejemplo y verás lo que ocurre.
>
> Saludos,
> José Luis Capel
>
>
Es completamente normal, porque cuando navegas por el DBGrid, este, lo único
que hace es notificar a su DataSet de las operaciones de navegación. El
dataset realiza operación solicitada y se lo vuelve a tranmitir a todos los
DataControls incluido el DBGrid. Para que lo entiendas, el DBGrid no tiene
ni idea de como hacer un SKIP. La operación realmente la hace el DataSet,
pero el DbBrowse no asume ningún tipo de cambio en su visualización.
Posteriormente es el DataSet el que notifica al Browse de la operación, y
este reacciona. Es un poco enrevesado, pero tiene que ser así.
Si quitas el lUPdLinked pues entonces paso lo que te ocurre y es que el
Browse se queda muerto y no responde a las operaciones de navegación sobre
si mismo.
La propiedad lUpdLinked a FALSO está pensanda precisamente para que los
DataControls NO SE ENTEREN de ciertos movimientos en el Dataset, como por
ejemplo, realizar un Seek en la misma tabla que se hace un browse para
comprobar una clave primaria.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=4512c472@news.xailer.com...]4512c472@news.xailer.com...[/email]
> Ignacio,
>
> Gracias por tu respuesta.
>
>> Sin ver tu ejemplo, no entiendo lo que quieres demostrar. Obviamente si
>> lUpdLinked es falso TODOS los controles que dependen de dicho dataset,
>> incluido el DbBrowse, no se entrerán de las operaciones que hagas y por
>> lo
>> tanto es completamente normal que el resultado visual sea diferente.
>>
>
> Mira el ejemplo y verás lo que ocurre.
>
> Saludos,
> José Luis Capel
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Diferencias en dbBrowse cuando lUpdLinked := .T./.F.
Ignacio,
Muchísimas gracias por tu respuesta.
>
> Es completamente normal, porque cuando navegas por el DBGrid, este, lo
> único
> que hace es notificar a su DataSet de las operaciones de navegación. El
> dataset realiza operación solicitada y se lo vuelve a tranmitir a todos
> los
> DataControls incluido el DBGrid. Para que lo entiendas, el DBGrid no tiene
> ni idea de como hacer un SKIP. La operación realmente la hace el DataSet,
> pero el DbBrowse no asume ningún tipo de cambio en su visualización.
> Posteriormente es el DataSet el que notifica al Browse de la operación, y
> este reacciona. Es un poco enrevesado, pero tiene que ser así.
Creo que lo he entendido.
>
> Si quitas el lUPdLinked pues entonces paso lo que te ocurre y es que el
> Browse se queda muerto y no responde a las operaciones de navegación sobre
> si mismo.
>
Correcto, mientras lUpdLinked := .F. los datacontrols no reaccionan.
> La propiedad lUpdLinked a FALSO está pensanda precisamente para que los
> DataControls NO SE ENTEREN de ciertos movimientos en el Dataset, como por
> ejemplo, realizar un Seek en la misma tabla que se hace un browse para
> comprobar una clave primaria.
>
Pero en esto hay algo que no acabo de entender. Mientras lUpdLinked := .F.
los datacontrols no 'actualizan' su valor. Y cuando lUpdLinked := .T.,
justo en ese momento, el DataSet actualiza los valores de sus datacontrols.
¿Es correcto? Si esto es correcto, entiendo que el dbBrowse no recibe
correctamente la notificación/actualización cuando el memdataset está vacio.
Te acompaño un segundo ejemplo donde hago la misma operación que en el
ejemplo anterior. Solo que en este caso no elimino todos los elementos sino
la mitad. Ambos browses actúan de forma _idéntica_.
Saludos y nuevamente gracias por tu tiempo y explicaciones.
José Luis Capel
Attached files pruebas6.zip (5 KB)Â
Muchísimas gracias por tu respuesta.
>
> Es completamente normal, porque cuando navegas por el DBGrid, este, lo
> único
> que hace es notificar a su DataSet de las operaciones de navegación. El
> dataset realiza operación solicitada y se lo vuelve a tranmitir a todos
> los
> DataControls incluido el DBGrid. Para que lo entiendas, el DBGrid no tiene
> ni idea de como hacer un SKIP. La operación realmente la hace el DataSet,
> pero el DbBrowse no asume ningún tipo de cambio en su visualización.
> Posteriormente es el DataSet el que notifica al Browse de la operación, y
> este reacciona. Es un poco enrevesado, pero tiene que ser así.
Creo que lo he entendido.
>
> Si quitas el lUPdLinked pues entonces paso lo que te ocurre y es que el
> Browse se queda muerto y no responde a las operaciones de navegación sobre
> si mismo.
>
Correcto, mientras lUpdLinked := .F. los datacontrols no reaccionan.
> La propiedad lUpdLinked a FALSO está pensanda precisamente para que los
> DataControls NO SE ENTEREN de ciertos movimientos en el Dataset, como por
> ejemplo, realizar un Seek en la misma tabla que se hace un browse para
> comprobar una clave primaria.
>
Pero en esto hay algo que no acabo de entender. Mientras lUpdLinked := .F.
los datacontrols no 'actualizan' su valor. Y cuando lUpdLinked := .T.,
justo en ese momento, el DataSet actualiza los valores de sus datacontrols.
¿Es correcto? Si esto es correcto, entiendo que el dbBrowse no recibe
correctamente la notificación/actualización cuando el memdataset está vacio.
Te acompaño un segundo ejemplo donde hago la misma operación que en el
ejemplo anterior. Solo que en este caso no elimino todos los elementos sino
la mitad. Ambos browses actúan de forma _idéntica_.
Saludos y nuevamente gracias por tu tiempo y explicaciones.
José Luis Capel
Attached files pruebas6.zip (5 KB)Â
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Diferencias en dbBrowse cuando lUpdLinked := .T./.F.
José Luis,
> Pero en esto hay algo que no acabo de entender. Mientras lUpdLinked :=
> .F. los datacontrols no 'actualizan' su valor. Y cuando lUpdLinked :=
> .T., justo en ese momento, el DataSet actualiza los valores de sus
> datacontrols. ¿Es correcto?
No, no es correcto.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=45138eac@news.xailer.com...]45138eac@news.xailer.com...[/email]
> Ignacio,
>
> Muchísimas gracias por tu respuesta.
>
>>
>> Es completamente normal, porque cuando navegas por el DBGrid, este, lo
>> único
>> que hace es notificar a su DataSet de las operaciones de navegación. El
>> dataset realiza operación solicitada y se lo vuelve a tranmitir a todos
>> los
>> DataControls incluido el DBGrid. Para que lo entiendas, el DBGrid no
>> tiene
>> ni idea de como hacer un SKIP. La operación realmente la hace el DataSet,
>> pero el DbBrowse no asume ningún tipo de cambio en su visualización.
>> Posteriormente es el DataSet el que notifica al Browse de la operación, y
>> este reacciona. Es un poco enrevesado, pero tiene que ser así.
>
> Creo que lo he entendido.
>
>
>>
>> Si quitas el lUPdLinked pues entonces paso lo que te ocurre y es que el
>> Browse se queda muerto y no responde a las operaciones de navegación
>> sobre
>> si mismo.
>>
>
> Correcto, mientras lUpdLinked := .F. los datacontrols no reaccionan.
>
>
>> La propiedad lUpdLinked a FALSO está pensanda precisamente para que los
>> DataControls NO SE ENTEREN de ciertos movimientos en el Dataset, como por
>> ejemplo, realizar un Seek en la misma tabla que se hace un browse para
>> comprobar una clave primaria.
>>
>
> Pero en esto hay algo que no acabo de entender. Mientras lUpdLinked :=
> .F. los datacontrols no 'actualizan' su valor. Y cuando lUpdLinked :=
> .T., justo en ese momento, el DataSet actualiza los valores de sus
> datacontrols. ¿Es correcto? Si esto es correcto, entiendo que el dbBrowse
> no recibe correctamente la notificación/actualización cuando el memdataset
> está vacio. Te acompaño un segundo ejemplo donde hago la misma operación
> que en el ejemplo anterior. Solo que en este caso no elimino todos los
> elementos sino la mitad. Ambos browses actúan de forma _idéntica_.
>
> Saludos y nuevamente gracias por tu tiempo y explicaciones.
> José Luis Capel
>
>
>
>
> Pero en esto hay algo que no acabo de entender. Mientras lUpdLinked :=
> .F. los datacontrols no 'actualizan' su valor. Y cuando lUpdLinked :=
> .T., justo en ese momento, el DataSet actualiza los valores de sus
> datacontrols. ¿Es correcto?
No, no es correcto.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=45138eac@news.xailer.com...]45138eac@news.xailer.com...[/email]
> Ignacio,
>
> Muchísimas gracias por tu respuesta.
>
>>
>> Es completamente normal, porque cuando navegas por el DBGrid, este, lo
>> único
>> que hace es notificar a su DataSet de las operaciones de navegación. El
>> dataset realiza operación solicitada y se lo vuelve a tranmitir a todos
>> los
>> DataControls incluido el DBGrid. Para que lo entiendas, el DBGrid no
>> tiene
>> ni idea de como hacer un SKIP. La operación realmente la hace el DataSet,
>> pero el DbBrowse no asume ningún tipo de cambio en su visualización.
>> Posteriormente es el DataSet el que notifica al Browse de la operación, y
>> este reacciona. Es un poco enrevesado, pero tiene que ser así.
>
> Creo que lo he entendido.
>
>
>>
>> Si quitas el lUPdLinked pues entonces paso lo que te ocurre y es que el
>> Browse se queda muerto y no responde a las operaciones de navegación
>> sobre
>> si mismo.
>>
>
> Correcto, mientras lUpdLinked := .F. los datacontrols no reaccionan.
>
>
>> La propiedad lUpdLinked a FALSO está pensanda precisamente para que los
>> DataControls NO SE ENTEREN de ciertos movimientos en el Dataset, como por
>> ejemplo, realizar un Seek en la misma tabla que se hace un browse para
>> comprobar una clave primaria.
>>
>
> Pero en esto hay algo que no acabo de entender. Mientras lUpdLinked :=
> .F. los datacontrols no 'actualizan' su valor. Y cuando lUpdLinked :=
> .T., justo en ese momento, el DataSet actualiza los valores de sus
> datacontrols. ¿Es correcto? Si esto es correcto, entiendo que el dbBrowse
> no recibe correctamente la notificación/actualización cuando el memdataset
> está vacio. Te acompaño un segundo ejemplo donde hago la misma operación
> que en el ejemplo anterior. Solo que en este caso no elimino todos los
> elementos sino la mitad. Ambos browses actúan de forma _idéntica_.
>
> Saludos y nuevamente gracias por tu tiempo y explicaciones.
> José Luis Capel
>
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Diferencias en dbBrowse cuando lUpdLinked := .T./.F.
Ignacio,
Gracias por tus explicaciones.
>> Pero en esto hay algo que no acabo de entender. Mientras lUpdLinked :=
>> .F. los datacontrols no 'actualizan' su valor. Y cuando lUpdLinked :=
>> .T., justo en ese momento, el DataSet actualiza los valores de sus
>> datacontrols. ¿Es correcto?
>
> No, no es correcto.
Acabo de entender lo que estaba ocurriendo
)))
El lUpdLinked hace lo que tiene que hacer muy bien.
En los ejemplos yo estoy haciendo un ::odbBrowse:lRedraw := .F. antes de
comenzar las operaciones y lo pongo a .T. después de terminar el proceso.
No se por cuales motivos, en el primer ejemplo no acababa de pintar bien el
browse dejando una fila fantasma. Para que todo vaya bien cuando hago lo
siguiente:
::oMemDataSet:lUpdLinked := .F.
...
... Operaciones
...
::oMemDataSet:lUpdLinked := .T.
::oMemDataSet:Refresh()
y por cada datacontrol un Refresh.
Saludos y gracias,
José Luis Capel
Gracias por tus explicaciones.
>> Pero en esto hay algo que no acabo de entender. Mientras lUpdLinked :=
>> .F. los datacontrols no 'actualizan' su valor. Y cuando lUpdLinked :=
>> .T., justo en ese momento, el DataSet actualiza los valores de sus
>> datacontrols. ¿Es correcto?
>
> No, no es correcto.
Acabo de entender lo que estaba ocurriendo

El lUpdLinked hace lo que tiene que hacer muy bien.
En los ejemplos yo estoy haciendo un ::odbBrowse:lRedraw := .F. antes de
comenzar las operaciones y lo pongo a .T. después de terminar el proceso.
No se por cuales motivos, en el primer ejemplo no acababa de pintar bien el
browse dejando una fila fantasma. Para que todo vaya bien cuando hago lo
siguiente:
::oMemDataSet:lUpdLinked := .F.
...
... Operaciones
...
::oMemDataSet:lUpdLinked := .T.
::oMemDataSet:Refresh()
y por cada datacontrol un Refresh.
Saludos y gracias,
José Luis Capel