Página 1 de 1

MemDataSet:Edit + MemDataSet:Filter + MemDataSet:Delete

Publicado: Vie Dic 29, 2006 1:56 pm
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)Â

MemDataSet:Edit + MemDataSet:Filter + MemDataSet:Delete

Publicado: Mar Ene 02, 2007 9:22 am
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
>
>
>

MemDataSet:Edit + MemDataSet:Filter + MemDataSet:Delete

Publicado: Lun Ene 08, 2007 9:21 am
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
>>
>>
>>
>
>