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.
>