FoxPro/Visual FoxPro - actualizar grid

   
Vista:

actualizar grid

Publicado por Alvaro Garcia (5 intervenciones) el 29/10/2012 23:12:21
Estoy aprendiendo Vfp9 y normalmente las dudas las busco en este estupendo foro.
Bueno, va mi pregunta.
Tengo un formulario donde he añadido entre otros, un botón con el siguiente código:

Thisform.Grid1.RecordSource= ""
SELECT * FROM TABLAS!ARTICULOS WHERE Articulos.codigo_fam = (mCodFaminf);
into CURSOR miCursor READWRITE
Thisform.grid1.RecordSource= 'micursor'

thisform.grid1.column1.ControlSource = 'micursor.famycod'
thisform.grid1.column2.ControlSource = 'micursor.descripcio'
thisform.grid1.column3.ControlSource = 'micursor.pvp'
thisform.grid1.column4.ControlSource = 'micursor.marcado'

Thisform.Refresh

La consulta y el grid me funcionan bien, pero cuando modifico en el grid el valor de algún campo, no tengo ni idea de como guardar las modificaciones en la tabla Articulos.
Por favor, ¿podéis ayudarme?, si es posible me podéis mandar algún ejemplo.
Muy agradecido.
Alvaro.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

actualizar grid

Publicado por Fidel (321 intervenciones) el 30/10/2012 00:22:53
Asigna de esta forma, que es más rápido y fácil de leer. Se busca el objeto solo una vez.
with Thisform.grid1
.RecordSource= 'micursor'
.column1.ControlSource = 'micursor.famycod'
.column2.ControlSource = 'micursor.descripcio'
.column3.ControlSource = 'micursor.pvp'
. column4.ControlSource = 'micursor.marcado'
endwith

La actualización de la tabla depende de que cada registro tenga un código ó ID único y que tenga un índice para ese código único.

* Actualizar por ID
* Suponiendo que ARTICULOS tiene una etiqueta de Indice llamada "ARTID", indice sobre el campo de codificación única.
* Suponiendo que no se utiliza CursorAdapter ( o sea, utilizando bloque manual)
SELECT MiCursor
SCAN
SCATTER MEMO TO gaArray
IF !INDEXSEEK(MiCursor.Codigo,.F.,"ARTICULOS","ARTID")
INSERT INTO ARTICULOS FROM ARRAY gaArray
else
SELECT ARTICULOS
INDEXSEEK("MiCursor.Codigo,.T.,"ARTICULOS","ARTID")
IF RLOCK()
GATHER FROM gaArray
ENDIF


ENDSCAN
SELECT ARTICULOS
UNLOCK

Si estás trabajando con tablas nativas, puedes apelar también al número de registro, siempre que no cierres la tabla que hay que actualizar y modifiques el SELECT SQL.
SELECT *,RECNO() FROM TABLAS!ARTICULOS WHERE Articulos.codigo_fam = (mCodFaminf);
into CURSOR miCursor READWRITE
El útimo campo del cursor será un campo que contiene el número de registro que coresponde a la tabla. Su nombre es la combinación de "Exp_"+el número de campo.
select Micursor
cExp="Exp_"+ltrim(str(fcount() ))

* Actualizar con el número de registro
* Suponiendo que no se utiliza CursorAdapter ( o sea, utilizando bloque manual)
Select Micursor
SCAN
nRegistro=Evaluate(cExp)
Scatter MEMO TO gaArray
if nRegistro = 0
INSERT INTO ARticulos FROM ARRAY gaArray
else
SELECT ARTICULOS
GO nRegistro
IF RLOCK()
GATHER FROM gaArray
endif
endif
ENDSCAN
SELECT ARTICULOS
UNLOCK
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

actualizar grid

Publicado por Alvaro Garcia (5 intervenciones) el 01/11/2012 18:33:31
Muchas gracias Fidel.
Por fin he conseguido guardar los cambios, bueno todos menos los de un campo que tengo declarado como lógico. ¿Porque ocurre esto?
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar