Hola:
Al activar un control quiero recoger en una variable el valor de una
celda de un MemDataSet al estilo:
cDato := ::oMemDataSet1:aData[::oMemDataSet1:nRecno,1]
Perfecto funciona sin nungún problema, pero si realizo una ordenación
del MemDataSet distinta a la de la carga original con el Open, el valor
que obtengo en cDato, ya no es correcto. Como puedo solucionar esto.
Gracias.
Emilio Gil.
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.
Una de MemDataSet
-
- Mensajes: 16
- Registrado: Jue Abr 06, 2006 6:22 pm
- ignacio
- Site Admin
- Mensajes: 9452
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Una de MemDataSet
Emilio,
Para recuperar el valor es más elegante esto:
cData := ::oMemDataSet1:NombreDeLaColumna
o
cData := ::oMemDataSet1:FieldGet( 1 )
En lo concerniente al hecho de que logicamente la posición del elemento
varía cuando se reordena y por lo tanto nRecno ya no es válido para
recuperar el mismo valor, se me ocurren varias formas de hacerlo, pero si
usaras DataControls con el DataSet no tendrías ningún problema:
1) No guardes el valor del elemento del subarray, sino el subarray en si
mismo. Me explico:
aData := ::oMemDataSet1:aWork[ ::oMemDataSet1:nRecno ]
aData ya no depende de ningún nRecno y además incluso es un valor recogido
por referencia, lo que quiere decir que si se modifica el DataSet tu
variable aData recogera los cambios.
Acabo de añadir un método GetLine() para que en el futuro se pueda hacer
simplemente:
aSubArray := ::oMemDataSet1:GetLine()
2) Recupera nRecno no en la matriz de trabajo, sino en la matriz original, y
guarda dicho valor para acceder siempre al dato que necesites
WITH OBJECT ::oMemDataSet1
nRealRecno := Ascan( :aData, {|v| v == :aWork[ :nRecno ] } )
END WITH
Y luego haz:
::oMemDataSet1:aData[ nRealRecno ]
Un saludo,
"emilio gil" <emiliogil@ya.com> escribió en el mensaje
news:[email=44354044@ozsrvnegro.ozlan.local...]44354044@ozsrvnegro.ozlan.local...[/email]
> Hola:
>
> Al activar un control quiero recoger en una variable el valor de una
> celda de un MemDataSet al estilo:
>
> cDato := ::oMemDataSet1:aData[::oMemDataSet1:nRecno,1]
>
> Perfecto funciona sin nungún problema, pero si realizo una ordenación del
> MemDataSet distinta a la de la carga original con el Open, el valor que
> obtengo en cDato, ya no es correcto. Como puedo solucionar esto.
>
> Gracias.
> Emilio Gil.
>
Para recuperar el valor es más elegante esto:
cData := ::oMemDataSet1:NombreDeLaColumna
o
cData := ::oMemDataSet1:FieldGet( 1 )
En lo concerniente al hecho de que logicamente la posición del elemento
varía cuando se reordena y por lo tanto nRecno ya no es válido para
recuperar el mismo valor, se me ocurren varias formas de hacerlo, pero si
usaras DataControls con el DataSet no tendrías ningún problema:
1) No guardes el valor del elemento del subarray, sino el subarray en si
mismo. Me explico:
aData := ::oMemDataSet1:aWork[ ::oMemDataSet1:nRecno ]
aData ya no depende de ningún nRecno y además incluso es un valor recogido
por referencia, lo que quiere decir que si se modifica el DataSet tu
variable aData recogera los cambios.
Acabo de añadir un método GetLine() para que en el futuro se pueda hacer
simplemente:
aSubArray := ::oMemDataSet1:GetLine()
2) Recupera nRecno no en la matriz de trabajo, sino en la matriz original, y
guarda dicho valor para acceder siempre al dato que necesites
WITH OBJECT ::oMemDataSet1
nRealRecno := Ascan( :aData, {|v| v == :aWork[ :nRecno ] } )
END WITH
Y luego haz:
::oMemDataSet1:aData[ nRealRecno ]
Un saludo,
"emilio gil" <emiliogil@ya.com> escribió en el mensaje
news:[email=44354044@ozsrvnegro.ozlan.local...]44354044@ozsrvnegro.ozlan.local...[/email]
> Hola:
>
> Al activar un control quiero recoger en una variable el valor de una
> celda de un MemDataSet al estilo:
>
> cDato := ::oMemDataSet1:aData[::oMemDataSet1:nRecno,1]
>
> Perfecto funciona sin nungún problema, pero si realizo una ordenación del
> MemDataSet distinta a la de la carga original con el Open, el valor que
> obtengo en cDato, ya no es correcto. Como puedo solucionar esto.
>
> Gracias.
> Emilio Gil.
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com