José Luis,
Sin DataControls y por lo tanto sin bufferes:
WITH OBJECT oMemDataSet:
:Append()
:Fieldput( ....)
:Fieldput( ....)
:Fieldput( ....)
END WITH
oBrowse:Refresh()
No obstante no acabo de entender porque mezclas los dos sistemas, has de
usar uno u otro. En vez de:
:FieldPut(3,"Antonio")
Podrías usar simplemente:
:Nombre := Antonio
Aunque también si lo prefieres puede atacar al buffer directamente:
:VarPut( 3, "Antonio" )
Un saludo,
"José Luis Capel" <
jose.luis@iaicom.com> escribió en el mensaje
news:[email=Xns97B87FCA1E8E7asalesiaicomcom@82.144.6.50...]Xns97B87FCA1E8E7asalesiaicomcom@82.144.6.50...[/email]
> Ignacio,
>
>> ¿Estás seguro?
>>
>> Acabo de modificar el ejemplo de TMemDataSet y funciona correctamente:
>>
>> METHOD Button7Click( oSender ) CLASS TForm1
>>
>> ::oMemDataSet1:Fieldput( 1, "Prueba" )
>> ::oDbBrowse1:RefreshCurrent()
>>
>> RETURN Nil
>>
>> Como es lógico, es absolutamente necesario refrescar la fila
>> manualmente ya que estas manipulando directamente los datos con el
>> método FieldPut. Con el siguiente código no hace falta ni siquiera
>> refrescar el browse:
>>
>> WITH OBJECT ::oMemDataSet1
>> :Edit()
>> :Name := "Prueba"
>> :Update()
>> END WITH
>
> Gracias por el tiempo y las molestias que te estás tomando.
>
> Creo que ya se lo que está ocurriendo. Mira este código:
>
> WITH OBJECT ::oMemDataSet1
> :AddNew()
> :MiCampo1 := "Pepe"
> :MiCampo2 := "Juan"
> :FieldPut(3,"Antonio")
> :Save()
> END
>
> Por lo que entiendo (haga o no el refreshcurrent a continuación del
> fieldput), al hacer un SAVE pasa los valores del buffer interno del
> dataset al propio dataset, con lo que sobre-escribe el valor "Antonio" de
> la columna 3 por el que se haya generado en el buffer.
>
> Si es así, ¿hay alguna forma de no trabajar con buffer?
>
> Algo así como:
>
> WITH OBJECT ::oMemDataSet1
> :lBuffered := .F.
> :AddNew()
> :MiCampo1 := "Pepe"
> :MiCampo2 := "Juan"
> :FieldPut(3,"Antonio")
> :Save()
> END
>
> Saludos y gracias por todo,
> José Luis Capel