Página 1 de 1

TDataField:OnSetValue

Publicado: Vie Jul 21, 2006 1:29 pm
por Rolando
El ejemplo de la documentación lo vi y trate de usarlo, como esta claro en
el código que agregue, ademas vi la ayuda mas extensa ( que dicho sea de
paso contiene un error, falta cerrar el corchete de aValues y sobra la
llave abierta antes de aValues )
oDataSet:AddCalcField( "cTipo", {|oField| { aValues[
oField:DataSet:Tipo } )
de todas formas con el manual no me alcanzo para entenderlo, por eso
pido ayuda, gracias igual.
--
Rolando Sarrailh
TEL. (0221)-4891480
rsarrailh@ciudad.com.ar

TDataField:OnSetValue

Publicado: Vie Jul 21, 2006 1:35 pm
por ignacio
Rolando,
Intente hacer un pequeño ejemplo y lo revisaremos para indicarle lo que está
haciendo mal.
Un saludo,
"Rolando Sarrailh" <rsarrailh@gmail.com> escribió en el mensaje
news:[email=44c0baac@news.xailer.com...]44c0baac@news.xailer.com...[/email]
> El ejemplo de la documentación lo vi y trate de usarlo, como esta claro en
> el código que agregue, ademas vi la ayuda mas extensa ( que dicho sea de
> paso contiene un error, falta cerrar el corchete de aValues y sobra la
> llave abierta antes de aValues )
>
> oDataSet:AddCalcField( "cTipo", {|oField| { aValues[
> oField:DataSet:Tipo } )
>
> de todas formas con el manual no me alcanzo para entenderlo, por eso
> pido ayuda, gracias igual.
>
> --
> Rolando Sarrailh
> TEL. (0221)-4891480
> rsarrailh@ciudad.com.ar
>

TDataField:OnSetValue

Publicado: Vie Jul 21, 2006 3:47 pm
por Rolando
Va el ejemplo.
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:[email=44c0bbfd@news.xailer.com...]44c0bbfd@news.xailer.com...[/email]
> Rolando,
>
> Intente hacer un pequeño ejemplo y lo revisaremos para indicarle lo que
> está
> haciendo mal.
>
> Un saludo,
>
> "Rolando Sarrailh" <rsarrailh@gmail.com> escribió en el mensaje
> news:[email=44c0baac@news.xailer.com...]44c0baac@news.xailer.com...[/email]
>> El ejemplo de la documentación lo vi y trate de usarlo, como esta claro
>> en
>> el código que agregue, ademas vi la ayuda mas extensa ( que dicho sea de
>> paso contiene un error, falta cerrar el corchete de aValues y sobra la
>> llave abierta antes de aValues )
>>
>> oDataSet:AddCalcField( "cTipo", {|oField| { aValues[
>> oField:DataSet:Tipo } )
>>
>> de todas formas con el manual no me alcanzo para entenderlo, por eso
>> pido ayuda, gracias igual.
>>
>> --
>> Rolando Sarrailh
>> TEL. (0221)-4891480
>> rsarrailh@ciudad.com.ar
>>
>
>


Attached files Nuevo.zip (3.4 KB)Â

TDataField:OnSetValue

Publicado: Vie Jul 21, 2006 5:27 pm
por ignacio
Rolando,
Muchas gracias. He visto los siguientes errores:
1) ::oDataPac:cMutual:OnSetValue := {|ofield,
value|savetipo(ofield:odataset, value) }
::oDataPac:cMutual NO es un objeto TDataField. Es el valor del campo, en tu
caso lo que devuelva el bloque:
{|oField| aValues[ oField:oDataSet:NRO_RES ] }
Debería haberse escrito así:
WITH OBJECT ::oDataPac:AddCalcField("cMutual", {|oField| aValues[
oField:oDataSet:NRO_RES ] } )
:OnSetValue := {|ofield, value|savetipo(ofield:odataset, value) }
END WITH
2) Has utilizado para el primer campo en el Form2 un control tipo TDBEdit,
pero el campo que enlaza es del tipo numérico. Los controles tipo TEdit o
TDBEdit sólo manejan tipos carácter. Por este motivo daba un error de
FieldPut() al salvar los datos. No obstante acabo de modificar la clase
TDbfDataSet para que ofrezca más información cuando esto ocurra, por
ejemplo:
#1: XAILER Fieldput error: Invalid data type for field 'CODPAC'. Expected
type 'N', got type 'C' (1)
´3) La grabación en la función SaveTipo() no funcionaba porque la
actualización de los campos calculados se hacía después de los campos
normales, y por lo tanto cualquier modificación que hicieses en los campos
normales, como seguía en modo edición, no se tenían en cuenta. He
solucionado el problema forzando a que primero se graben los campos
calculados y a continuación los campos normales. No obstante lo puedes
solucionar tu facilmente forzando a que se modifique el valor del campo y no
el de su buffer de edición de esta forma:
FUNCTION SaveTipo( oDataSet, Value )
LOCAL oField := oDataSet:oFieldByName( "NRO_RES" )
do case
case Value == "Mutualizado"
oField:FieldPut( 1 )
case Value == "No Mutualizado"
oField:FieldPut( 2 )
case Value == "Otra"
oField:FieldPut( 3 )
end case
RETURN nil
Saludos,
"Rolando Sarrailh" <rsarrailh@gmail.com> escribió en el mensaje
news:[email=44c0dae8@news.xailer.com...]44c0dae8@news.xailer.com...[/email]
> Va el ejemplo.
>
> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
> news:[email=44c0bbfd@news.xailer.com...]44c0bbfd@news.xailer.com...[/email]
>> Rolando,
>>
>> Intente hacer un pequeño ejemplo y lo revisaremos para indicarle lo que
>> está
>> haciendo mal.
>>
>> Un saludo,
>>
>> "Rolando Sarrailh" <rsarrailh@gmail.com> escribió en el mensaje
>> news:[email=44c0baac@news.xailer.com...]44c0baac@news.xailer.com...[/email]
>>> El ejemplo de la documentación lo vi y trate de usarlo, como esta claro
>>> en
>>> el código que agregue, ademas vi la ayuda mas extensa ( que dicho sea de
>>> paso contiene un error, falta cerrar el corchete de aValues y sobra la
>>> llave abierta antes de aValues )
>>>
>>> oDataSet:AddCalcField( "cTipo", {|oField| { aValues[
>>> oField:DataSet:Tipo } )
>>>
>>> de todas formas con el manual no me alcanzo para entenderlo, por eso
>>> pido ayuda, gracias igual.
>>>
>>> --
>>> Rolando Sarrailh
>>> TEL. (0221)-4891480
>>> rsarrailh@ciudad.com.ar
>>>
>>
>>
>
>
>

TDataField:OnSetValue

Publicado: Vie Jul 21, 2006 7:14 pm
por Rolando
Ignacio,
Muchas gracias, todo funciona perfecto, me confundio un poco
la propiedad lNumeric de TDBEdit pero ya esta bien claro todo.
Un saludo.
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:44c0f25c$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Rolando,
>
> Muchas gracias. He visto los siguientes errores:
>
> 1) ::oDataPac:cMutual:OnSetValue := {|ofield,
> value|savetipo(ofield:odataset, value) }
>
> ::oDataPac:cMutual NO es un objeto TDataField. Es el valor del campo, en
> tu caso lo que devuelva el bloque:
>
> {|oField| aValues[ oField:oDataSet:NRO_RES ] }
>
> Debería haberse escrito así:
>
> WITH OBJECT ::oDataPac:AddCalcField("cMutual", {|oField| aValues[
> oField:oDataSet:NRO_RES ] } )
> :OnSetValue := {|ofield, value|savetipo(ofield:odataset, value) }
> END WITH
>
> 2) Has utilizado para el primer campo en el Form2 un control tipo TDBEdit,
> pero el campo que enlaza es del tipo numérico. Los controles tipo TEdit o
> TDBEdit sólo manejan tipos carácter. Por este motivo daba un error de
> FieldPut() al salvar los datos. No obstante acabo de modificar la clase
> TDbfDataSet para que ofrezca más información cuando esto ocurra, por
> ejemplo:
>
> #1: XAILER Fieldput error: Invalid data type for field 'CODPAC'. Expected
> type 'N', got type 'C' (1)
>
> ´3) La grabación en la función SaveTipo() no funcionaba porque la
> actualización de los campos calculados se hacía después de los campos
> normales, y por lo tanto cualquier modificación que hicieses en los campos
> normales, como seguía en modo edición, no se tenían en cuenta. He
> solucionado el problema forzando a que primero se graben los campos
> calculados y a continuación los campos normales. No obstante lo puedes
> solucionar tu facilmente forzando a que se modifique el valor del campo y
> no el de su buffer de edición de esta forma:
>
> FUNCTION SaveTipo( oDataSet, Value )
>
> LOCAL oField := oDataSet:oFieldByName( "NRO_RES" )
>
> do case
> case Value == "Mutualizado"
> oField:FieldPut( 1 )
> case Value == "No Mutualizado"
> oField:FieldPut( 2 )
> case Value == "Otra"
> oField:FieldPut( 3 )
> end case
> RETURN nil
>
> Saludos,
>
> "Rolando Sarrailh" <rsarrailh@gmail.com> escribió en el mensaje
> news:[email=44c0dae8@news.xailer.com...]44c0dae8@news.xailer.com...[/email]
>> Va el ejemplo.
>>
>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>> news:[email=44c0bbfd@news.xailer.com...]44c0bbfd@news.xailer.com...[/email]
>>> Rolando,
>>>
>>> Intente hacer un pequeño ejemplo y lo revisaremos para indicarle lo que
>>> está
>>> haciendo mal.
>>>
>>> Un saludo,
>>>
>>> "Rolando Sarrailh" <rsarrailh@gmail.com> escribió en el mensaje
>>> news:[email=44c0baac@news.xailer.com...]44c0baac@news.xailer.com...[/email]
>>>> El ejemplo de la documentación lo vi y trate de usarlo, como esta claro
>>>> en
>>>> el código que agregue, ademas vi la ayuda mas extensa ( que dicho sea
>>>> de
>>>> paso contiene un error, falta cerrar el corchete de aValues y sobra la
>>>> llave abierta antes de aValues )
>>>>
>>>> oDataSet:AddCalcField( "cTipo", {|oField| { aValues[
>>>> oField:DataSet:Tipo } )
>>>>
>>>> de todas formas con el manual no me alcanzo para entenderlo, por
>>>> eso
>>>> pido ayuda, gracias igual.
>>>>
>>>> --
>>>> Rolando Sarrailh
>>>> TEL. (0221)-4891480
>>>> rsarrailh@ciudad.com.ar
>>>>
>>>
>>>
>>
>>
>>
>
>

TDataField:OnSetValue

Publicado: Mié Jul 26, 2006 5:50 am
por Rolando
Hola: de vuelta por aqui, tengo un problema con los campos calculados cuando
entran en modo :AddNew no graba los valores adecuados, en modo :Edit andan
bien, tambien hay un error en el control memo que no logro descubrir, va el
ejemplo y Muchas gracias,
Un saludo.
"Rolando Sarrailh" <rsarrailh@gmail.com> escribió en el mensaje
news:[email=44c10b8f@news.xailer.com...]44c10b8f@news.xailer.com...[/email]
> Ignacio,
> Muchas gracias, todo funciona perfecto, me confundio un
> poco
> la propiedad lNumeric de TDBEdit pero ya esta bien claro todo.
>
> Un saludo.
>
>
> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
> news:44c0f25c$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Rolando,
>>
>> Muchas gracias. He visto los siguientes errores:
>>
>> 1) ::oDataPac:cMutual:OnSetValue := {|ofield,
>> value|savetipo(ofield:odataset, value) }
>>
>> ::oDataPac:cMutual NO es un objeto TDataField. Es el valor del campo, en
>> tu caso lo que devuelva el bloque:
>>
>> {|oField| aValues[ oField:oDataSet:NRO_RES ] }
>>
>> Debería haberse escrito así:
>>
>> WITH OBJECT ::oDataPac:AddCalcField("cMutual", {|oField| aValues[
>> oField:oDataSet:NRO_RES ] } )
>> :OnSetValue := {|ofield, value|savetipo(ofield:odataset, value) }
>> END WITH
>>
>> 2) Has utilizado para el primer campo en el Form2 un control tipo
>> TDBEdit,
>> pero el campo que enlaza es del tipo numérico. Los controles tipo TEdit o
>> TDBEdit sólo manejan tipos carácter. Por este motivo daba un error de
>> FieldPut() al salvar los datos. No obstante acabo de modificar la clase
>> TDbfDataSet para que ofrezca más información cuando esto ocurra, por
>> ejemplo:
>>
>> #1: XAILER Fieldput error: Invalid data type for field 'CODPAC'. Expected
>> type 'N', got type 'C' (1)
>>
>> ´3) La grabación en la función SaveTipo() no funcionaba porque la
>> actualización de los campos calculados se hacía después de los campos
>> normales, y por lo tanto cualquier modificación que hicieses en los
>> campos
>> normales, como seguía en modo edición, no se tenían en cuenta. He
>> solucionado el problema forzando a que primero se graben los campos
>> calculados y a continuación los campos normales. No obstante lo puedes
>> solucionar tu facilmente forzando a que se modifique el valor del campo y
>> no el de su buffer de edición de esta forma:
>>
>> FUNCTION SaveTipo( oDataSet, Value )
>>
>> LOCAL oField := oDataSet:oFieldByName( "NRO_RES" )
>>
>> do case
>> case Value == "Mutualizado"
>> oField:FieldPut( 1 )
>> case Value == "No Mutualizado"
>> oField:FieldPut( 2 )
>> case Value == "Otra"
>> oField:FieldPut( 3 )
>> end case
>> RETURN nil
>>
>> Saludos,
>>
>> "Rolando Sarrailh" <rsarrailh@gmail.com> escribió en el mensaje
>> news:[email=44c0dae8@news.xailer.com...]44c0dae8@news.xailer.com...[/email]
>>> Va el ejemplo.
>>>
>>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>>> news:[email=44c0bbfd@news.xailer.com...]44c0bbfd@news.xailer.com...[/email]
>>>> Rolando,
>>>>
>>>> Intente hacer un pequeño ejemplo y lo revisaremos para indicarle lo que
>>>> está
>>>> haciendo mal.
>>>>
>>>> Un saludo,
>>>>
>>>> "Rolando Sarrailh" <rsarrailh@gmail.com> escribió en el mensaje
>>>> news:[email=44c0baac@news.xailer.com...]44c0baac@news.xailer.com...[/email]
>>>>> El ejemplo de la documentación lo vi y trate de usarlo, como esta
>>>>> claro
>>>>> en
>>>>> el código que agregue, ademas vi la ayuda mas extensa ( que dicho sea
>>>>> de
>>>>> paso contiene un error, falta cerrar el corchete de aValues y sobra
>>>>> la
>>>>> llave abierta antes de aValues )
>>>>>
>>>>> oDataSet:AddCalcField( "cTipo", {|oField| { aValues[
>>>>> oField:DataSet:Tipo } )
>>>>>
>>>>> de todas formas con el manual no me alcanzo para entenderlo, por
>>>>> eso
>>>>> pido ayuda, gracias igual.
>>>>>
>>>>> --
>>>>> Rolando Sarrailh
>>>>> TEL. (0221)-4891480
>>>>> rsarrailh@ciudad.com.ar
>>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>
>


Attached files Nuevo.zip (18.8 KB)Â

TDataField:OnSetValue

Publicado: Mié Jul 26, 2006 12:00 pm
por jfgimenez
Rolando,
> Hola: de vuelta por aqui, tengo un problema con los campos calculados
> cuando
> entran en modo :AddNew no graba los valores adecuados, en modo :Edit andan
> bien,
Es porque estás usando oField:FieldPut(), y tienes que usar oField:VarPut()
> tambien hay un error en el control memo que no logro descubrir, va el
> ejemplo y Muchas gracias,
Corregido, gracias. Aquí tienes el módulo. Sólo tienes que añadir el .obj al
proyecto.
--
Un saludo,
José F. Giménez
http://www.xailer.com


Attached files dbfdataset.zip (11.6 KB)Â

TDataField:OnSetValue

Publicado: Mié Jul 26, 2006 6:55 pm
por Rolando
Ok. muchas gracias, como se agrega el .obj al proyecto ?
Un saludo,
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=44c73d5b@news.xailer.com...]44c73d5b@news.xailer.com...[/email]
> Rolando,
>
>> Hola: de vuelta por aqui, tengo un problema con los campos calculados
>> cuando
>> entran en modo :AddNew no graba los valores adecuados, en modo :Edit
>> andan
>> bien,
>
> Es porque estás usando oField:FieldPut(), y tienes que usar
> oField:VarPut()
>
>
>> tambien hay un error en el control memo que no logro descubrir, va el
>> ejemplo y Muchas gracias,
>
> Corregido, gracias. Aquí tienes el módulo. Sólo tienes que añadir el .obj
> al proyecto.
>
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
>
>

TDataField:OnSetValue

Publicado: Mié Jul 26, 2006 7:24 pm
por jfgimenez
Rolando,
> Ok. muchas gracias, como se agrega el .obj al proyecto ?
Usa la opción "Añadir fichero al proyecto..." del menú "Proyecto"
--
Un saludo,
José F. Giménez
http://www.xailer.com