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.

Campo fantasma en DataSet

Foro de Xailer profesional en español
Responder
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Campo fantasma en DataSet

Mensaje por Xevi »

Necesito de un campo "fantasma" en un DBBrowse.
Lo que pretendo es tener una columna que contendrá un valor que no está guardado en ningun campo de la DBF, sinó que lo voy a cambiar según se desarrolle la aplicación...
Bien, creo un campo cualquiera en el DataSet.
METHOD DbfDataSet2Create( oSender ) CLASS TFrmRebutsBancaris
::oDbfDataSet2:lOpen := .T.
::oDbfDataSet2:AddCalcField( "X", {|| "S" } )
RETURN Nil
Luego lo incluyo en el DBBrowse, en la columna1 que la he creado "vacia" para este menester...
METHOD Browse2Create( oSender ) CLASS TFrmRebutsBancaris
::oBrowse2:aCols[1]:oDataField := "X"
RETURN Nil
Bien, al visualizar el Browse... se visualizan TODOS los registros con la columna1 con una S, correcto hasta aquí­.
Luego... cuando piche doble clic, quiero que cambie el valor de S a N...
METHOD Browse2DblClick( oSender, nKeys, nCol, nRow ) CLASS TFrmRebutsBancaris
MsgInfo( ::oDbfDataSet2:X ) //Ahi me informa correctamente... el valor es S
::oDbfDataSet2:X := If( ::oDbfDataSet2:X == "S", "N", "S" )
::oDbfDataSet2:Update()
MsgInfo( ::oDbfDataSet2:X ) //Ahí­ el valor sigue siendo S ¿?
::oDbfDataSet2:Refresh()
MsgInfo( ::oDbfDataSet2:X ) //Y sigue siendo S ¿?
::oBrowse2:Refresh()
MsgInfo( ::oDbfDataSet2:X ) //Y sigue siendo S ¿?
RETURN Nil
Por lo que tengo entendido, se pueden tener campos calculados o fantasmas, pero...
¿Que hago mal????
Gracias,
Un Saludo,
Xevi.
--
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Campo fantasma en DataSet

Mensaje por jlalin »

Xevi,
no conozco a fondo los DataSets y puede que esté dando palos de ciego,
pero prueba así­:
oMiField := ::oDbfDataSet2:AddCalcField( "X", {|| "S" } )
....
::oBrowse2:aCols[1]:oDataField := oMiField
Saludos,
José Lalí­n
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Campo fantasma en DataSet

Mensaje por Xevi »

He probado todo lo que se me ha ocurrido, pero no soy capaz de hacerlo solo.
Una ayuda, venga !!!
Gracias.
Un Saludo,
Xevi.
"José Lalín" <dezac@corevia.com> escribió en el mensaje
news:4320afcc$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
> no conozco a fondo los DataSets y puede que esté dando palos de ciego,
> pero prueba así:
>
> oMiField := ::oDbfDataSet2:AddCalcField( "X", {|| "S" } )
> ...
> ::oBrowse2:aCols[1]:oDataField := oMiField
>
> Saludos,
> José Lalín
>
CapelSoft
Mensajes: 135
Registrado: Vie Jul 29, 2005 8:49 am
Ubicación: Valencia - España
Contactar:

Campo fantasma en DataSet

Mensaje por CapelSoft »

Xevi,
> METHOD DbfDataSet2Create( oSender ) CLASS TFrmRebutsBancaris
> ::oDbfDataSet2:lOpen := .T.
> ::oDbfDataSet2:AddCalcField( "X", {|| "S" } )
> RETURN Nil
Mira a ver si haciendo esto se resuelve:
> ::oDbfDataSet2:AddCalcField( "X", {| n | n } )
Dime si te va...
Saludos,
José Luis Capel
--
José Luis Capel
http://www.CapelBlog.es
CapelSoft
Mensajes: 135
Registrado: Vie Jul 29, 2005 8:49 am
Ubicación: Valencia - España
Contactar:

Campo fantasma en DataSet

Mensaje por CapelSoft »

Ups,
Se me olvidaba: para asignar un valor por ::oDbfDataSet2:x := "S"
La idea de un campo calculado es tener un 'codeblock' que se evalua cada
vez que llamas a ese campo.
Saludos,
José Luis Capel
José Luis Capel escribió:
> Xevi,
>
>
>> METHOD DbfDataSet2Create( oSender ) CLASS TFrmRebutsBancaris
>> ::oDbfDataSet2:lOpen := .T.
>> ::oDbfDataSet2:AddCalcField( "X", {|| "S" } )
>> RETURN Nil
>
>
>
> Mira a ver si haciendo esto se resuelve:
>
> > ::oDbfDataSet2:AddCalcField( "X", {| n | n } )
>
> Dime si te va...
>
> Saludos,
> José Luis Capel
--
José Luis Capel
http://www.CapelBlog.es
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Campo fantasma en DataSet

Mensaje por Xevi »

José Luis,
No funciona....
METHOD DbfDataSet2Create( oSender ) CLASS TFrmRebutsBancaris
::oDbfDataSet2:lOpen := .T.
* ::oDbfDataSet2:AddCalcField( "X", {|| "*" } )
::oDbfDataSet2:AddCalcField( "X", {| n | n } )
RETURN Nil
METHOD Browse2Create( oSender ) CLASS TFrmRebutsBancaris
::oBrowse2:aCols[1]:oDataField := "X"
RETURN Nil
Si miro que vale el campo X antes de cambiar de valor...
METHOD Browse2DblClick( oSender, nKeys, nCol, nRow ) CLASS TFrmRebutsBancaris
MsgInfo( ::oDbfDataSet2:X )
::oDbfDataSet2:X := "*" //If( ::oDbfDataSet2:X == "X", " ", "X" )
::oDbfDataSet2:Update()
::oDbfDataSet2:Refresh()
::oBrowse2:Refresh()
RETURN Nil
Un Saludo,
Xevi.
"José Luis Capel" <capelsoft@terra.es> escribió en el mensaje news:432134a7$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>
> Ups,
>
> Se me olvidaba: para asignar un valor por ::oDbfDataSet2:x := "S"
>
> La idea de un campo calculado es tener un 'codeblock' que se evalua cada
> vez que llamas a ese campo.
>
> Saludos,
> José Luis Capel
>
>
> José Luis Capel escribió:
>> Xevi,
>>
>>
>>> METHOD DbfDataSet2Create( oSender ) CLASS TFrmRebutsBancaris
>>> ::oDbfDataSet2:lOpen := .T.
>>> ::oDbfDataSet2:AddCalcField( "X", {|| "S" } )
>>> RETURN Nil
>>
>>
>>
>> Mira a ver si haciendo esto se resuelve:
>>
>> > ::oDbfDataSet2:AddCalcField( "X", {| n | n } )
>>
>> Dime si te va...
>>
>> Saludos,
>> José Luis Capel
>
--
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Campo fantasma en DataSet

Mensaje por Xevi »

Perdón, el otro mensaje se me ha enviado antes de terminarlo...
José Luis,
No funciona....
METHOD DbfDataSet2Create( oSender ) CLASS TFrmRebutsBancaris
::oDbfDataSet2:lOpen := .T.
* ::oDbfDataSet2:AddCalcField( "X", {|| "*" } )
::oDbfDataSet2:AddCalcField( "X", {| n | n } )
RETURN Nil
METHOD Browse2Create( oSender ) CLASS TFrmRebutsBancaris
::oBrowse2:aCols[1]:oDataField := "X"
RETURN Nil
Si miro que vale el campo X antes de cambiar de valor...
METHOD Browse2DblClick( oSender, nKeys, nCol, nRow ) CLASS
TFrmRebutsBancaris
MsgInfo( ::oDbfDataSet2:X )
::oDbfDataSet2:X := "*" //If( ::oDbfDataSet2:X == "X", " ", "X" )
::oDbfDataSet2:Update()
::oDbfDataSet2:Refresh()
::oBrowse2:Refresh()
RETURN Nil
MsgInfo( ::oDbfDataSet2:X ) devuelve {TDATAFIELD}
¿¿??
Ignacio... Help me!!!
Un Saludo,
Xevi.
"José Luis Capel" <capelsoft@terra.es> escribió en el mensaje
news:432134a7$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>
> Ups,
>
> Se me olvidaba: para asignar un valor por ::oDbfDataSet2:x := "S"
>
> La idea de un campo calculado es tener un 'codeblock' que se evalua cada
> vez que llamas a ese campo.
>
> Saludos,
> José Luis Capel
>
>
> José Luis Capel escribió:
>> Xevi,
>>
>>
>>> METHOD DbfDataSet2Create( oSender ) CLASS TFrmRebutsBancaris
>>> ::oDbfDataSet2:lOpen := .T.
>>> ::oDbfDataSet2:AddCalcField( "X", {|| "S" } )
>>> RETURN Nil
>>
>>
>>
>> Mira a ver si haciendo esto se resuelve:
>>
>> > ::oDbfDataSet2:AddCalcField( "X", {| n | n } )
>>
>> Dime si te va...
>>
>> Saludos,
>> José Luis Capel
>
joseluis
Mensajes: 642
Registrado: Jue Sep 08, 2005 12:54 pm

Campo fantasma en DataSet

Mensaje por joseluis »

Xevi,
De la ayuda de Xailer:
-------------->>>
Por ejemplo, imaginemos los cuatro tí­picos campos de un código bancario,
código de banco, código de sucursal, dí­gito de control y numero de
cuenta. Para mostrarlo en el browse solemos utilizar la siguiente
extructura:
BBBB SSSS DD CCCCCCCCCC
Para mostrarlo en el Browse no tendremos más que hacer el siguiente
campo calculado:
oField := oDS:AddCalcField( "CtaCor", {| oField | oDS:Banco + " " +
oDS:Sucursal + " " + oDS:DigControl + " " + oDS:Cuenta }
Y luego utilizar el literal 'CtaCor' como nombre de campo.
Supongamos que además deseemos editar dicho campo directamente en el
Browse, logicamente el campo 'CtaCor' no existe, sin embargo podemos
sobrecargar el evento OnSetValue() e indicar directamente como queremos
que se haga el salvado:
oField:OnSetValue := {|oField, Value | Salvar( oField, Value ) }
Function Salvar( oField, Value )
WITH OBJECT oField:oDataSet
:Banco := Left( Value, 4 )
:Sucursal := Substr( Value, 6, 4 )
:DigControl := Substr( Value, 11, 2 )
:Cuenta := Substr( Value, 14, 10 )
END WITH
RETURN NIL
-------------->>>
Con lo cual, en tu caso has de asignar :
oField := ::oDbfDataSet2:AddCalcField( "X", {| n | n } )
Y en el browse:
::oBrowse2:aCols[1]:oDataField := oField
Saludos,
José Luis Capel
PD: espero haber acertado... ;-)
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Campo fantasma en DataSet

Mensaje por Xevi »

José Luis
Esto lo habí­a probado, pero no entiendo la variable oField, a ver.
Es una variable local en el evento OnCreate???
METHOD DbfDataSet2Create( oSender ) CLASS TFrmRebutsBancaris
local oField
::oDbfDataSet2:lOpen := .T.
oField := ::oDbfDataSet2:AddCalcField( "X", {| n | n } )
RETURN Nil
Pero si se trata de una variable local...
¿el método de asignar el campo al Browse???
METHOD Browse2Create( oSender ) CLASS TFrmRebutsBancaris
::oBrowse2:aCols[1]:oDataField := oField
RETURN Nil
Esto no puede funcionar porque la variable no está definida... ¿?
¿Lo tendré que hacer desde el Create() del Form ???
Un Saludo,
Xevi.
"José Luis Capel" <joseluis@iaicom.com> escribió en el mensaje news:43214464$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Xevi,
>
>
> De la ayuda de Xailer:
>
> -------------->>>
> Por ejemplo, imaginemos los cuatro tí­picos campos de un código bancario,
> código de banco, código de sucursal, dí­gito de control y numero de
> cuenta. Para mostrarlo en el browse solemos utilizar la siguiente
> extructura:
>
>
> BBBB SSSS DD CCCCCCCCCC
>
>
> Para mostrarlo en el Browse no tendremos más que hacer el siguiente
> campo calculado:
>
> oField := oDS:AddCalcField( "CtaCor", {| oField | oDS:Banco + " " +
> oDS:Sucursal + " " + oDS:DigControl + " " + oDS:Cuenta }
>
> Y luego utilizar el literal 'CtaCor' como nombre de campo.
>
>
> Supongamos que además deseemos editar dicho campo directamente en el
> Browse, logicamente el campo 'CtaCor' no existe, sin embargo podemos
> sobrecargar el evento OnSetValue() e indicar directamente como queremos
> que se haga el salvado:
>
>
> oField:OnSetValue := {|oField, Value | Salvar( oField, Value ) }
>
> Function Salvar( oField, Value )
>
> WITH OBJECT oField:oDataSet
> :Banco := Left( Value, 4 )
> :Sucursal := Substr( Value, 6, 4 )
> :DigControl := Substr( Value, 11, 2 )
> :Cuenta := Substr( Value, 14, 10 )
> END WITH
> RETURN NIL
>
> -------------->>>
>
> Con lo cual, en tu caso has de asignar :
>
> oField := ::oDbfDataSet2:AddCalcField( "X", {| n | n } )
>
> Y en el browse:
>
> ::oBrowse2:aCols[1]:oDataField := oField
>
> Saludos,
> José Luis Capel
> PD: espero haber acertado... ;-)
>
--
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5714
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Campo fantasma en DataSet

Mensaje por jfgimenez »

Xevi,
Esto lo habí­a probado, pero no entiendo la variable oField, a ver.
Es una variable local en el evento OnCreate???
METHOD DbfDataSet2Create( oSender ) CLASS TFrmRebutsBancaris
local oField
::oDbfDataSet2:lOpen := .T.
oField := ::oDbfDataSet2:AddCalcField( "X", {| n | n } )
RETURN Nil
Pero si se trata de una variable local...
¿el método de asignar el campo al Browse???
METHOD Browse2Create( oSender ) CLASS TFrmRebutsBancaris
::oBrowse2:aCols[1]:oDataField := oField
RETURN Nil
Esto no puede funcionar porque la variable no está definida... ¿?
Siempre puedes declararlo como una DATA. En Xailer, todos los formularios que diseñas con el IDE son clases que derivan de TForm, pero que puedes modificar a tu antojo, incluyendo la posibilidad de añadir DATAs que podrás usar desde cualquier método de la clase.
--
Un saludo,
José F. Giménez
--
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Campo fantasma en DataSet

Mensaje por jlalin »

Xevi,
> Pero si se trata de una variable local...
> ¿el método de asignar el campo al Browse???
> METHOD Browse2Create( oSender ) CLASS TFrmRebutsBancaris
> ::oBrowse2:aCols[1]:oDataField := oField
> RETURN Nil
creo que también puedes hacerlo así­:
::oBrowse2:aCols[1]:oDataField := ::oDataSet:oFieldByName( "X" )
Saludos,
José Lalí­n
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9302
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Campo fantasma en DataSet

Mensaje por ignacio »

Xevi,
Un campo cálculado, no es más que un campo que cada vez que se pide su valor se evalua el código que tu hayas introducido cuando se creo.
Pero NO ES un campo fantasma, en el cual puedas guardar y recuperar su valor por cada fila o registro de la tabla. Siempre podrás crearte una matriz con la misma dimensión que el número de registros y llevar TU completamente el control.
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:[email=4320a8c4@ozsrvnegro.ozlan.local...]4320a8c4@ozsrvnegro.ozlan.local...[/email]
Necesito de un campo "fantasma" en un DBBrowse.
Lo que pretendo es tener una columna que contendrá un valor que no está guardado en ningun campo de la DBF, sinó que lo voy a cambiar según se desarrolle la aplicación...
Bien, creo un campo cualquiera en el DataSet.
METHOD DbfDataSet2Create( oSender ) CLASS TFrmRebutsBancaris
::oDbfDataSet2:lOpen := .T.
::oDbfDataSet2:AddCalcField( "X", {|| "S" } )
RETURN Nil
Luego lo incluyo en el DBBrowse, en la columna1 que la he creado "vacia" para este menester...
METHOD Browse2Create( oSender ) CLASS TFrmRebutsBancaris
::oBrowse2:aCols[1]:oDataField := "X"
RETURN Nil
Bien, al visualizar el Browse... se visualizan TODOS los registros con la columna1 con una S, correcto hasta aquí­.
Luego... cuando piche doble clic, quiero que cambie el valor de S a N...
METHOD Browse2DblClick( oSender, nKeys, nCol, nRow ) CLASS TFrmRebutsBancaris
MsgInfo( ::oDbfDataSet2:X ) //Ahi me informa correctamente... el valor es S
::oDbfDataSet2:X := If( ::oDbfDataSet2:X == "S", "N", "S" )
::oDbfDataSet2:Update()
MsgInfo( ::oDbfDataSet2:X ) //Ahí­ el valor sigue siendo S ¿?
::oDbfDataSet2:Refresh()
MsgInfo( ::oDbfDataSet2:X ) //Y sigue siendo S ¿?
::oBrowse2:Refresh()
MsgInfo( ::oDbfDataSet2:X ) //Y sigue siendo S ¿?
RETURN Nil
Por lo que tengo entendido, se pueden tener campos calculados o fantasmas, pero...
¿Que hago mal????
Gracias,
Un Saludo,
Xevi.
--
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Campo fantasma en DataSet

Mensaje por Xevi »

Ignacio,
>Siempre podrás crearte una matriz con la misma dimensión que el número de registros y llevar TU completamente el control.
Bien, pues aplicando el tema de utilizar una matriz....
Creo el Array, marco dos registros "distintos" a los demás...
::aSelect2 := Array( ::oDbfDataSet2:RecCount() )
For n:= 1 to Len( ::aSelect2 )
::aSelect2[n] := " "
Next
::aSelect2[1] := "*"
::aSelect2[3] := "*"
Pero...¿Cómo relaciono la matriz con el Browse???
METHOD DbfDataSet2Create( oSender ) CLASS TFrmRebutsBancaris
::oDbfDataSet2:AddCalcField( "X", {|oField| ::aSelect2[QUE PONGO AQUí] } )
Return nil
METHOD Browse2Create( oSender ) CLASS TFrmRebutsBancaris
::oBrowse2:aCols[1]:oDataField := "X"
Return nil
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje news:4325438b$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Xevi,
Un campo cálculado, no es más que un campo que cada vez que se pide su valor se evalua el código que tu hayas introducido cuando se creo.
Pero NO ES un campo fantasma, en el cual puedas guardar y recuperar su valor por cada fila o registro de la tabla. Siempre podrás crearte una matriz con la misma dimensión que el número de registros y llevar TU completamente el control.
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:[email=4320a8c4@ozsrvnegro.ozlan.local...]4320a8c4@ozsrvnegro.ozlan.local...[/email]
Necesito de un campo "fantasma" en un DBBrowse.
Lo que pretendo es tener una columna que contendrá un valor que no está guardado en ningun campo de la DBF, sinó que lo voy a cambiar según se desarrolle la aplicación...
Bien, creo un campo cualquiera en el DataSet.
METHOD DbfDataSet2Create( oSender ) CLASS TFrmRebutsBancaris
::oDbfDataSet2:lOpen := .T.
::oDbfDataSet2:AddCalcField( "X", {|| "S" } )
RETURN Nil
Luego lo incluyo en el DBBrowse, en la columna1 que la he creado "vacia" para este menester...
METHOD Browse2Create( oSender ) CLASS TFrmRebutsBancaris
::oBrowse2:aCols[1]:oDataField := "X"
RETURN Nil
Bien, al visualizar el Browse... se visualizan TODOS los registros con la columna1 con una S, correcto hasta aquí­.
Luego... cuando piche doble clic, quiero que cambie el valor de S a N...
METHOD Browse2DblClick( oSender, nKeys, nCol, nRow ) CLASS TFrmRebutsBancaris
MsgInfo( ::oDbfDataSet2:X ) //Ahi me informa correctamente... el valor es S
::oDbfDataSet2:X := If( ::oDbfDataSet2:X == "S", "N", "S" )
::oDbfDataSet2:Update()
MsgInfo( ::oDbfDataSet2:X ) //Ahí­ el valor sigue siendo S ¿?
::oDbfDataSet2:Refresh()
MsgInfo( ::oDbfDataSet2:X ) //Y sigue siendo S ¿?
::oBrowse2:Refresh()
MsgInfo( ::oDbfDataSet2:X ) //Y sigue siendo S ¿?
RETURN Nil
Por lo que tengo entendido, se pueden tener campos calculados o fantasmas, pero...
¿Que hago mal????
Gracias,
Un Saludo,
Xevi.
--
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Campo fantasma en DataSet

Mensaje por Xevi »

Me respondo yo mismo...
::oDbfDataSet2:AddCalcField( "X", {|oField| ::aSelect2[QUE PONGO AQUí] } )
::oDbfDataSet2:AddCalcField( "X", {|oField| ::aSelect2[::oBrowse2:nKeyNo] } )
Un Saludo,
Xevi.
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:[email=43287353@ozsrvnegro.ozlan.local...]43287353@ozsrvnegro.ozlan.local...[/email]
Ignacio,
>Siempre podrás crearte una matriz con la misma dimensión que el número de registros y llevar TU completamente el control.
Bien, pues aplicando el tema de utilizar una matriz....
Creo el Array, marco dos registros "distintos" a los demás...
::aSelect2 := Array( ::oDbfDataSet2:RecCount() )
For n:= 1 to Len( ::aSelect2 )
::aSelect2[n] := " "
Next
::aSelect2[1] := "*"
::aSelect2[3] := "*"
Pero...¿Cómo relaciono la matriz con el Browse???
METHOD DbfDataSet2Create( oSender ) CLASS TFrmRebutsBancaris
::oDbfDataSet2:AddCalcField( "X", {|oField| ::aSelect2[QUE PONGO AQUí] } )
Return nil
METHOD Browse2Create( oSender ) CLASS TFrmRebutsBancaris
::oBrowse2:aCols[1]:oDataField := "X"
Return nil
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje news:4325438b$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Xevi,
Un campo cálculado, no es más que un campo que cada vez que se pide su valor se evalua el código que tu hayas introducido cuando se creo.
Pero NO ES un campo fantasma, en el cual puedas guardar y recuperar su valor por cada fila o registro de la tabla. Siempre podrás crearte una matriz con la misma dimensión que el número de registros y llevar TU completamente el control.
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:[email=4320a8c4@ozsrvnegro.ozlan.local...]4320a8c4@ozsrvnegro.ozlan.local...[/email]
Necesito de un campo "fantasma" en un DBBrowse.
Lo que pretendo es tener una columna que contendrá un valor que no está guardado en ningun campo de la DBF, sinó que lo voy a cambiar según se desarrolle la aplicación...
Bien, creo un campo cualquiera en el DataSet.
METHOD DbfDataSet2Create( oSender ) CLASS TFrmRebutsBancaris
::oDbfDataSet2:lOpen := .T.
::oDbfDataSet2:AddCalcField( "X", {|| "S" } )
RETURN Nil
Luego lo incluyo en el DBBrowse, en la columna1 que la he creado "vacia" para este menester...
METHOD Browse2Create( oSender ) CLASS TFrmRebutsBancaris
::oBrowse2:aCols[1]:oDataField := "X"
RETURN Nil
Bien, al visualizar el Browse... se visualizan TODOS los registros con la columna1 con una S, correcto hasta aquí­.
Luego... cuando piche doble clic, quiero que cambie el valor de S a N...
METHOD Browse2DblClick( oSender, nKeys, nCol, nRow ) CLASS TFrmRebutsBancaris
MsgInfo( ::oDbfDataSet2:X ) //Ahi me informa correctamente... el valor es S
::oDbfDataSet2:X := If( ::oDbfDataSet2:X == "S", "N", "S" )
::oDbfDataSet2:Update()
MsgInfo( ::oDbfDataSet2:X ) //Ahí­ el valor sigue siendo S ¿?
::oDbfDataSet2:Refresh()
MsgInfo( ::oDbfDataSet2:X ) //Y sigue siendo S ¿?
::oBrowse2:Refresh()
MsgInfo( ::oDbfDataSet2:X ) //Y sigue siendo S ¿?
RETURN Nil
Por lo que tengo entendido, se pueden tener campos calculados o fantasmas, pero...
¿Que hago mal????
Gracias,
Un Saludo,
Xevi.
--
Responder