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.

Una de MemDataSet

Foro público de Xailer en español
Responder
emilio gil[1]
Mensajes: 16
Registrado: Jue Abr 06, 2006 6:22 pm

Una de MemDataSet

Mensaje por emilio gil[1] »

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.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9452
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Una de MemDataSet

Mensaje por ignacio »

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.
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Responder