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.
Campo fantasma en DataSet
Campo fantasma en DataSet
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.
--
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.
--
Campo fantasma en DataSet
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
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
Campo fantasma en DataSet
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
>
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
>
-
- Mensajes: 135
- Registrado: Vie Jul 29, 2005 8:49 am
- Ubicación: Valencia - España
- Contactar:
Campo fantasma en DataSet
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
> 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
-
- Mensajes: 135
- Registrado: Vie Jul 29, 2005 8:49 am
- Ubicación: Valencia - España
- Contactar:
Campo fantasma en DataSet
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
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
Campo fantasma en DataSet
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
>
--
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
>
--
Campo fantasma en DataSet
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
>
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
>
Campo fantasma en DataSet
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...
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...
Campo fantasma en DataSet
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...
>
--
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...
>
--
Campo fantasma en DataSet
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
--
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
--
Campo fantasma en DataSet
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
> 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
- ignacio
- Site Admin
- Mensajes: 9302
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Campo fantasma en DataSet
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.
--
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.
--
Campo fantasma en DataSet
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.
--
>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.
--
Campo fantasma en DataSet
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.
--
::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.
--