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.

MemDataSet:Edit + MemDataSet:Filter + MemDataSet:Delete

Foro de Xailer profesional en español
Responder
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

MemDataSet:Edit + MemDataSet:Filter + MemDataSet:Delete

Mensaje por jose.luis »

Hola,
En un MemDataset establezco un filtro y lo ordeno como sigue:
::oMemDataSet1:SetFilter("DIA1 > 400.00")
::oMemDataSet1:sort({2}) // NDIA1
Luego, me posiciono en un registro cualquiera y modifico un campo de la fila
y lo elimino.
// -----> Modificar un dato de la fila actual del memdataset
::oMemDataSet1:Edit()
::oMemDataSet1:VarPut( ::oMemDataSet1:FieldPos( "DIA"+LTRIM(STR( 1 ) ) ),
0 )
::oMemDataSet1:Save()
::oMemDataSet1:Delete()
Y luego me recorro el memdataset (que está con filtro activo) de esta
manera:
cCodigo := ""
::oMemDataSet1:GoTop()
DO WHILE !::oMemDataSet1:Eof()
cCodigo+= ::oMemDataSet1:cliente+CRLF
::oMemDataSet1:Skip(+1)
ENDDO
MsgInfo(ccodigo)
Y el resultado es que _todos_ los registros muestran el mismo dato. Da la
sensación de que aunque hagas un Skip, éste no se actualiza.
Os dejo un ejemplo donde, para verlo claramente, pulsais los botones del
formulario en el siguiente orden:
Filtrar->Borrar registro actual -> Recorrer MemSet
Y vereis que siempre muestra el mismo dato.
Saludos y gracias por vuestro tiempo.
José Luis Capel


Attached files test3.zip (2.8 KB)Â
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9457
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

MemDataSet:Edit + MemDataSet:Filter + MemDataSet:Delete

Mensaje por ignacio »

José Luis,
Edit() se usa en conjunción con Update() y NO con Save(). Si no llamas a
Update() sigues en modo edición y por lo tanto oMemDataSet1:cliente siempre
apunta al buffer del DataField.
Para recorrer el dataset incluso en modo edición puedes utilizar:
oMemDataSet1:cliente( dsFIELD )
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=45951055@news.xailer.com...]45951055@news.xailer.com...[/email]
> Hola,
>
>
> En un MemDataset establezco un filtro y lo ordeno como sigue:
>
> ::oMemDataSet1:SetFilter("DIA1 > 400.00")
> ::oMemDataSet1:sort({2}) // NDIA1
>
> Luego, me posiciono en un registro cualquiera y modifico un campo de la
> fila y lo elimino.
>
> // -----> Modificar un dato de la fila actual del memdataset
> ::oMemDataSet1:Edit()
> ::oMemDataSet1:VarPut( ::oMemDataSet1:FieldPos( "DIA"+LTRIM(STR( 1 ) ) ),
> 0 )
> ::oMemDataSet1:Save()
> ::oMemDataSet1:Delete()
>
>
> Y luego me recorro el memdataset (que está con filtro activo) de esta
> manera:
>
> cCodigo := ""
>
> ::oMemDataSet1:GoTop()
> DO WHILE !::oMemDataSet1:Eof()
> cCodigo+= ::oMemDataSet1:cliente+CRLF
> ::oMemDataSet1:Skip(+1)
> ENDDO
>
> MsgInfo(ccodigo)
>
> Y el resultado es que _todos_ los registros muestran el mismo dato. Da la
> sensación de que aunque hagas un Skip, éste no se actualiza.
>
> Os dejo un ejemplo donde, para verlo claramente, pulsais los botones del
> formulario en el siguiente orden:
>
> Filtrar->Borrar registro actual -> Recorrer MemSet
>
> Y vereis que siempre muestra el mismo dato.
>
> Saludos y gracias por vuestro tiempo.
> José Luis Capel
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

MemDataSet:Edit + MemDataSet:Filter + MemDataSet:Delete

Mensaje por jose.luis »

Ignacio,
Ok... entendido. Gracias!!
Saludos,
José Luis Capel
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:459a164c$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> José Luis,
>
> Edit() se usa en conjunción con Update() y NO con Save(). Si no llamas a
> Update() sigues en modo edición y por lo tanto oMemDataSet1:cliente
> siempre apunta al buffer del DataField.
>
> Para recorrer el dataset incluso en modo edición puedes utilizar:
> oMemDataSet1:cliente( dsFIELD )
>
> Un saludo,
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
> "José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
> news:[email=45951055@news.xailer.com...]45951055@news.xailer.com...[/email]
>> Hola,
>>
>>
>> En un MemDataset establezco un filtro y lo ordeno como sigue:
>>
>> ::oMemDataSet1:SetFilter("DIA1 > 400.00")
>> ::oMemDataSet1:sort({2}) // NDIA1
>>
>> Luego, me posiciono en un registro cualquiera y modifico un campo de la
>> fila y lo elimino.
>>
>> // -----> Modificar un dato de la fila actual del memdataset
>> ::oMemDataSet1:Edit()
>> ::oMemDataSet1:VarPut( ::oMemDataSet1:FieldPos( "DIA"+LTRIM(STR( 1 ) ) ),
>> 0 )
>> ::oMemDataSet1:Save()
>> ::oMemDataSet1:Delete()
>>
>>
>> Y luego me recorro el memdataset (que está con filtro activo) de esta
>> manera:
>>
>> cCodigo := ""
>>
>> ::oMemDataSet1:GoTop()
>> DO WHILE !::oMemDataSet1:Eof()
>> cCodigo+= ::oMemDataSet1:cliente+CRLF
>> ::oMemDataSet1:Skip(+1)
>> ENDDO
>>
>> MsgInfo(ccodigo)
>>
>> Y el resultado es que _todos_ los registros muestran el mismo dato. Da
>> la sensación de que aunque hagas un Skip, éste no se actualiza.
>>
>> Os dejo un ejemplo donde, para verlo claramente, pulsais los botones del
>> formulario en el siguiente orden:
>>
>> Filtrar->Borrar registro actual -> Recorrer MemSet
>>
>> Y vereis que siempre muestra el mismo dato.
>>
>> Saludos y gracias por vuestro tiempo.
>> José Luis Capel
>>
>>
>>
>
>
Responder