Hola,
He creado un Datacontrol TEDIT asociado a un campo NSERIE.
Edito con oDbf:Edit()
Y necesito saber 2 cosas, si el usuario ha modificado el valor en pantalla y
si el valor que cargó en pantalla ha variado en el disco
duro porque otro usuario lo ha modificado.
Intento comprobar eso antes del oDb:Update() de la siguiente manera:
o := :oFieldByName( "nserie" )
msginfo( o:InitValue +CRLF+ o:Buffer +CRLF+ o:FieldGet() +CRLF+
o:VarGet())
No entiendo que pasa, pero los 4 valores que me muestra son exactamente el
valor Inicial que se cargó en pantalla.
Ejemplo:
Pulso Edit() y carga el 111, lo modifico en pantalla por 222, y antes de
hacer Update(), el msginfo me muestra 4 veces 111.
No lo entiendo, a ver si me pudierais decir que debo hacer para saber esas 2
cosas, cambiado en pantalla o cambiado en el HD.
Un Saludo,
Joaquín
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.
Problema con datacontrol y Tedit
Problema con datacontrol y Tedit
Joaquin,
Es normal. El nuevo valor ESTA GUARDADO en el propio control EDIT.
Un saludo,
"Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
news:44e4d5ff$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Hola,
>
> He creado un Datacontrol TEDIT asociado a un campo NSERIE.
>
> Edito con oDbf:Edit()
>
> Y necesito saber 2 cosas, si el usuario ha modificado el valor en pantalla
> y si el valor que cargó en pantalla ha variado en el disco
> duro porque otro usuario lo ha modificado.
>
>
> Intento comprobar eso antes del oDb:Update() de la siguiente manera:
>
> o := :oFieldByName( "nserie" )
> msginfo( o:InitValue +CRLF+ o:Buffer +CRLF+ o:FieldGet() +CRLF+
> o:VarGet())
>
>
> No entiendo que pasa, pero los 4 valores que me muestra son exactamente el
> valor Inicial que se cargó en pantalla.
>
>
> Ejemplo:
>
> Pulso Edit() y carga el 111, lo modifico en pantalla por 222, y antes
> de hacer Update(), el msginfo me muestra 4 veces 111.
>
>
>
>
> No lo entiendo, a ver si me pudierais decir que debo hacer para saber esas
> 2 cosas, cambiado en pantalla o cambiado en el HD.
>
>
> Un Saludo,
> Joaquín
>
>
>
Es normal. El nuevo valor ESTA GUARDADO en el propio control EDIT.
Un saludo,
"Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
news:44e4d5ff$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Hola,
>
> He creado un Datacontrol TEDIT asociado a un campo NSERIE.
>
> Edito con oDbf:Edit()
>
> Y necesito saber 2 cosas, si el usuario ha modificado el valor en pantalla
> y si el valor que cargó en pantalla ha variado en el disco
> duro porque otro usuario lo ha modificado.
>
>
> Intento comprobar eso antes del oDb:Update() de la siguiente manera:
>
> o := :oFieldByName( "nserie" )
> msginfo( o:InitValue +CRLF+ o:Buffer +CRLF+ o:FieldGet() +CRLF+
> o:VarGet())
>
>
> No entiendo que pasa, pero los 4 valores que me muestra son exactamente el
> valor Inicial que se cargó en pantalla.
>
>
> Ejemplo:
>
> Pulso Edit() y carga el 111, lo modifico en pantalla por 222, y antes
> de hacer Update(), el msginfo me muestra 4 veces 111.
>
>
>
>
> No lo entiendo, a ver si me pudierais decir que debo hacer para saber esas
> 2 cosas, cambiado en pantalla o cambiado en el HD.
>
>
> Un Saludo,
> Joaquín
>
>
>
Problema con datacontrol y Tedit
Ignacio,
No es un TEdit normal con su Value, es un TDBedit (datacontrol), lo lógico y
fácil es que el onchange (internamente) del Tedit fuera alimentando el valor
del Buffer del campo del oDataset asociado, con lo cual podríamos tener por
un lado en modo Edit() el Buffer que es el valor del campo que puede ir
cambiando el usuario, por otro el InitValue que es lo que hay en memoria
imágen de cuando se cargó el dato desde el disco y el FieldGet() que es lo
que hay ahora en el HD.
Porque, según lo que me comentas es normal que una vez uses datacontrols y
uses AddNew() o Edit(), el Modified() o lModified no funcionen ¿es así?
Como imaginaba que debería poder modificarse un registro con datacontrols y
datasets era así:
Edit()
change de datacontrols cambian valor del buffer
lModified se pone a True para indicar que el usuario ha tocado en
pantalla
El Update() Antes de grabar:
Reclock() del registro
lModifiedHD (o algo parecido) nos indicaría que alguien ha cambiado los
datos del HD, es decir, InitValue <> FielGet() actual.
Aviso con un mensaje predefinido y posibilidad de recargar los buffers
desde el HD y abortar grabación.
Si todo correcto Save()
No obstante, si hay algo en los datacontrols que nos pueda dar esa
información, es lo que estoy buscando, pero si no, es inviable usar Edit() -
AddNew() - Update(), por lo menos en la vida real.
Un Saludo y gracias,
Joaquín
Creo que esos metodos de modificar y añadir automáticos que nos liberan de
gran trabajo deberían hacer algo como:
"Ignacio Ortiz de Zúñiga" <_support_@xailer.com> escribió en el mensaje
news:[email=44e564f3@news.xailer.com...]44e564f3@news.xailer.com...[/email]
> Joaquin,
>
> Es normal. El nuevo valor ESTA GUARDADO en el propio control EDIT.
>
> Un saludo,
>
> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> news:44e4d5ff$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Hola,
>>
>> He creado un Datacontrol TEDIT asociado a un campo NSERIE.
>>
>> Edito con oDbf:Edit()
>>
>> Y necesito saber 2 cosas, si el usuario ha modificado el valor en
>> pantalla y si el valor que cargó en pantalla ha variado en el disco
>> duro porque otro usuario lo ha modificado.
>>
>>
>> Intento comprobar eso antes del oDb:Update() de la siguiente manera:
>>
>> o := :oFieldByName( "nserie" )
>> msginfo( o:InitValue +CRLF+ o:Buffer +CRLF+ o:FieldGet()
>> +CRLF+ o:VarGet())
>>
>>
>> No entiendo que pasa, pero los 4 valores que me muestra son exactamente
>> el valor Inicial que se cargó en pantalla.
>>
>>
>> Ejemplo:
>>
>> Pulso Edit() y carga el 111, lo modifico en pantalla por 222, y antes
>> de hacer Update(), el msginfo me muestra 4 veces 111.
>>
>>
>>
>>
>> No lo entiendo, a ver si me pudierais decir que debo hacer para saber
>> esas 2 cosas, cambiado en pantalla o cambiado en el HD.
>>
>>
>> Un Saludo,
>> Joaquín
>>
>>
>>
>
>
No es un TEdit normal con su Value, es un TDBedit (datacontrol), lo lógico y
fácil es que el onchange (internamente) del Tedit fuera alimentando el valor
del Buffer del campo del oDataset asociado, con lo cual podríamos tener por
un lado en modo Edit() el Buffer que es el valor del campo que puede ir
cambiando el usuario, por otro el InitValue que es lo que hay en memoria
imágen de cuando se cargó el dato desde el disco y el FieldGet() que es lo
que hay ahora en el HD.
Porque, según lo que me comentas es normal que una vez uses datacontrols y
uses AddNew() o Edit(), el Modified() o lModified no funcionen ¿es así?
Como imaginaba que debería poder modificarse un registro con datacontrols y
datasets era así:
Edit()
change de datacontrols cambian valor del buffer
lModified se pone a True para indicar que el usuario ha tocado en
pantalla
El Update() Antes de grabar:
Reclock() del registro
lModifiedHD (o algo parecido) nos indicaría que alguien ha cambiado los
datos del HD, es decir, InitValue <> FielGet() actual.
Aviso con un mensaje predefinido y posibilidad de recargar los buffers
desde el HD y abortar grabación.
Si todo correcto Save()
No obstante, si hay algo en los datacontrols que nos pueda dar esa
información, es lo que estoy buscando, pero si no, es inviable usar Edit() -
AddNew() - Update(), por lo menos en la vida real.
Un Saludo y gracias,
Joaquín
Creo que esos metodos de modificar y añadir automáticos que nos liberan de
gran trabajo deberían hacer algo como:
"Ignacio Ortiz de Zúñiga" <_support_@xailer.com> escribió en el mensaje
news:[email=44e564f3@news.xailer.com...]44e564f3@news.xailer.com...[/email]
> Joaquin,
>
> Es normal. El nuevo valor ESTA GUARDADO en el propio control EDIT.
>
> Un saludo,
>
> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> news:44e4d5ff$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Hola,
>>
>> He creado un Datacontrol TEDIT asociado a un campo NSERIE.
>>
>> Edito con oDbf:Edit()
>>
>> Y necesito saber 2 cosas, si el usuario ha modificado el valor en
>> pantalla y si el valor que cargó en pantalla ha variado en el disco
>> duro porque otro usuario lo ha modificado.
>>
>>
>> Intento comprobar eso antes del oDb:Update() de la siguiente manera:
>>
>> o := :oFieldByName( "nserie" )
>> msginfo( o:InitValue +CRLF+ o:Buffer +CRLF+ o:FieldGet()
>> +CRLF+ o:VarGet())
>>
>>
>> No entiendo que pasa, pero los 4 valores que me muestra son exactamente
>> el valor Inicial que se cargó en pantalla.
>>
>>
>> Ejemplo:
>>
>> Pulso Edit() y carga el 111, lo modifico en pantalla por 222, y antes
>> de hacer Update(), el msginfo me muestra 4 veces 111.
>>
>>
>>
>>
>> No lo entiendo, a ver si me pudierais decir que debo hacer para saber
>> esas 2 cosas, cambiado en pantalla o cambiado en el HD.
>>
>>
>> Un Saludo,
>> Joaquín
>>
>>
>>
>
>
Problema con datacontrol y Tedit
Joaquin,
Uso de Datasets SIN Datacontrols:
Métdos Append(), Save()
Uso de Datasets CON Datacontrols:
Métodos AddNew(), Edit() y Update()
Por lo tanto operaciones directas sobre el dataset que no afectan a ningún
datacontrol vinculado se pueden hacer directamente con:
IF ODBF:APPEND()
ODBF:CAMPO1 := "..."
ODBF:RECUNLOCK()
ENDIF
No obstante también es posible hacer:
ODBF:ADDNEW()
ODBF:CAMPO1 := "..."
ODBF:UPDATE()
PERO '''OJO'' siempre y cuando no tengas ningún datacontrol apuntando al
CAMPO1 ya que en dicho caso lo que tu introduzcas en su buffer se 'machaca'
con el valor de dicho datacontrol
En cualquier caso es una perdidad de tiempo utilizar este método si no hay
ningún Datacontrol ya que es mucho más lento que el primero.
El buffer del datafield asociado al campo es utilizado internamente en los
procesos de AddNew() y Edit(), y cuando termina el proceso de edición con
Update() se vuelve a actualizar, pero logicamente el valor de un Datacontrol
vinculado está en el propio Datacontrol, como no podría ser de otra forma.
Además puede, e incluso es normal que más de un Datacontrol apunte a un
mismo campo.
Lo que si se ha hecho en una modificación reciente es provocar que incluso
dentro de un proceso de edición si se modifica el buffer de un DataField,
ello provoque la actualización automática de cualquier datacontrol que
pudiese estar vinculado con él.
Saludos,
"Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
news:[email=44e575c7@news.xailer.com...]44e575c7@news.xailer.com...[/email]
> Ignacio,
>
> No es un TEdit normal con su Value, es un TDBedit (datacontrol), lo lógico
> y fácil es que el onchange (internamente) del Tedit fuera alimentando el
> valor del Buffer del campo del oDataset asociado, con lo cual podríamos
> tener por un lado en modo Edit() el Buffer que es el valor del campo que
> puede ir cambiando el usuario, por otro el InitValue que es lo que hay en
> memoria imágen de cuando se cargó el dato desde el disco y el FieldGet()
> que es lo que hay ahora en el HD.
>
> Porque, según lo que me comentas es normal que una vez uses datacontrols y
> uses AddNew() o Edit(), el Modified() o lModified no funcionen ¿es así?
>
> Como imaginaba que debería poder modificarse un registro con datacontrols
> y datasets era así:
>
> Edit()
>
> change de datacontrols cambian valor del buffer
>
> lModified se pone a True para indicar que el usuario ha tocado en
> pantalla
>
> El Update() Antes de grabar:
>
> Reclock() del registro
>
> lModifiedHD (o algo parecido) nos indicaría que alguien ha cambiado los
> datos del HD, es decir, InitValue <> FielGet() actual.
>
> Aviso con un mensaje predefinido y posibilidad de recargar los buffers
> desde el HD y abortar grabación.
>
> Si todo correcto Save()
>
>
> No obstante, si hay algo en los datacontrols que nos pueda dar esa
> información, es lo que estoy buscando, pero si no, es inviable usar
> Edit() - AddNew() - Update(), por lo menos en la vida real.
>
>
> Un Saludo y gracias,
> Joaquín
>
>
>
>
>
> Creo que esos metodos de modificar y añadir automáticos que nos liberan de
> gran trabajo deberían hacer algo como:
>
>
> "Ignacio Ortiz de Zúñiga" <_support_@xailer.com> escribió en el mensaje
> news:[email=44e564f3@news.xailer.com...]44e564f3@news.xailer.com...[/email]
>> Joaquin,
>>
>> Es normal. El nuevo valor ESTA GUARDADO en el propio control EDIT.
>>
>> Un saludo,
>>
>> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
>> news:44e4d5ff$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>> Hola,
>>>
>>> He creado un Datacontrol TEDIT asociado a un campo NSERIE.
>>>
>>> Edito con oDbf:Edit()
>>>
>>> Y necesito saber 2 cosas, si el usuario ha modificado el valor en
>>> pantalla y si el valor que cargó en pantalla ha variado en el disco
>>> duro porque otro usuario lo ha modificado.
>>>
>>>
>>> Intento comprobar eso antes del oDb:Update() de la siguiente manera:
>>>
>>> o := :oFieldByName( "nserie" )
>>> msginfo( o:InitValue +CRLF+ o:Buffer +CRLF+ o:FieldGet()
>>> +CRLF+ o:VarGet())
>>>
>>>
>>> No entiendo que pasa, pero los 4 valores que me muestra son exactamente
>>> el valor Inicial que se cargó en pantalla.
>>>
>>>
>>> Ejemplo:
>>>
>>> Pulso Edit() y carga el 111, lo modifico en pantalla por 222, y antes
>>> de hacer Update(), el msginfo me muestra 4 veces 111.
>>>
>>>
>>>
>>>
>>> No lo entiendo, a ver si me pudierais decir que debo hacer para saber
>>> esas 2 cosas, cambiado en pantalla o cambiado en el HD.
>>>
>>>
>>> Un Saludo,
>>> Joaquín
>>>
>>>
>>>
>>
>>
>
>
Uso de Datasets SIN Datacontrols:
Métdos Append(), Save()
Uso de Datasets CON Datacontrols:
Métodos AddNew(), Edit() y Update()
Por lo tanto operaciones directas sobre el dataset que no afectan a ningún
datacontrol vinculado se pueden hacer directamente con:
IF ODBF:APPEND()
ODBF:CAMPO1 := "..."
ODBF:RECUNLOCK()
ENDIF
No obstante también es posible hacer:
ODBF:ADDNEW()
ODBF:CAMPO1 := "..."
ODBF:UPDATE()
PERO '''OJO'' siempre y cuando no tengas ningún datacontrol apuntando al
CAMPO1 ya que en dicho caso lo que tu introduzcas en su buffer se 'machaca'
con el valor de dicho datacontrol
En cualquier caso es una perdidad de tiempo utilizar este método si no hay
ningún Datacontrol ya que es mucho más lento que el primero.
El buffer del datafield asociado al campo es utilizado internamente en los
procesos de AddNew() y Edit(), y cuando termina el proceso de edición con
Update() se vuelve a actualizar, pero logicamente el valor de un Datacontrol
vinculado está en el propio Datacontrol, como no podría ser de otra forma.
Además puede, e incluso es normal que más de un Datacontrol apunte a un
mismo campo.
Lo que si se ha hecho en una modificación reciente es provocar que incluso
dentro de un proceso de edición si se modifica el buffer de un DataField,
ello provoque la actualización automática de cualquier datacontrol que
pudiese estar vinculado con él.
Saludos,
"Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
news:[email=44e575c7@news.xailer.com...]44e575c7@news.xailer.com...[/email]
> Ignacio,
>
> No es un TEdit normal con su Value, es un TDBedit (datacontrol), lo lógico
> y fácil es que el onchange (internamente) del Tedit fuera alimentando el
> valor del Buffer del campo del oDataset asociado, con lo cual podríamos
> tener por un lado en modo Edit() el Buffer que es el valor del campo que
> puede ir cambiando el usuario, por otro el InitValue que es lo que hay en
> memoria imágen de cuando se cargó el dato desde el disco y el FieldGet()
> que es lo que hay ahora en el HD.
>
> Porque, según lo que me comentas es normal que una vez uses datacontrols y
> uses AddNew() o Edit(), el Modified() o lModified no funcionen ¿es así?
>
> Como imaginaba que debería poder modificarse un registro con datacontrols
> y datasets era así:
>
> Edit()
>
> change de datacontrols cambian valor del buffer
>
> lModified se pone a True para indicar que el usuario ha tocado en
> pantalla
>
> El Update() Antes de grabar:
>
> Reclock() del registro
>
> lModifiedHD (o algo parecido) nos indicaría que alguien ha cambiado los
> datos del HD, es decir, InitValue <> FielGet() actual.
>
> Aviso con un mensaje predefinido y posibilidad de recargar los buffers
> desde el HD y abortar grabación.
>
> Si todo correcto Save()
>
>
> No obstante, si hay algo en los datacontrols que nos pueda dar esa
> información, es lo que estoy buscando, pero si no, es inviable usar
> Edit() - AddNew() - Update(), por lo menos en la vida real.
>
>
> Un Saludo y gracias,
> Joaquín
>
>
>
>
>
> Creo que esos metodos de modificar y añadir automáticos que nos liberan de
> gran trabajo deberían hacer algo como:
>
>
> "Ignacio Ortiz de Zúñiga" <_support_@xailer.com> escribió en el mensaje
> news:[email=44e564f3@news.xailer.com...]44e564f3@news.xailer.com...[/email]
>> Joaquin,
>>
>> Es normal. El nuevo valor ESTA GUARDADO en el propio control EDIT.
>>
>> Un saludo,
>>
>> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
>> news:44e4d5ff$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>> Hola,
>>>
>>> He creado un Datacontrol TEDIT asociado a un campo NSERIE.
>>>
>>> Edito con oDbf:Edit()
>>>
>>> Y necesito saber 2 cosas, si el usuario ha modificado el valor en
>>> pantalla y si el valor que cargó en pantalla ha variado en el disco
>>> duro porque otro usuario lo ha modificado.
>>>
>>>
>>> Intento comprobar eso antes del oDb:Update() de la siguiente manera:
>>>
>>> o := :oFieldByName( "nserie" )
>>> msginfo( o:InitValue +CRLF+ o:Buffer +CRLF+ o:FieldGet()
>>> +CRLF+ o:VarGet())
>>>
>>>
>>> No entiendo que pasa, pero los 4 valores que me muestra son exactamente
>>> el valor Inicial que se cargó en pantalla.
>>>
>>>
>>> Ejemplo:
>>>
>>> Pulso Edit() y carga el 111, lo modifico en pantalla por 222, y antes
>>> de hacer Update(), el msginfo me muestra 4 veces 111.
>>>
>>>
>>>
>>>
>>> No lo entiendo, a ver si me pudierais decir que debo hacer para saber
>>> esas 2 cosas, cambiado en pantalla o cambiado en el HD.
>>>
>>>
>>> Un Saludo,
>>> Joaquín
>>>
>>>
>>>
>>
>>
>
>