La Web del Programador: Comunidad de Programadores
 
    Pregunta:  191 - MODIFICAR EL CONTENIDO DE UNA COLUMNA DE UN DBGRID
Autor:  Arquimedes
Estoy programando con Visual Basic 4.0 y tengo un problema a la hora de modificar en tiempo de ejecución el contenido de una columna de un DBGrid. Lo he intentado en varios eventos (BeforeInsert, BeforeUpdate, etc.) pero en todos los casos me da el error 438: El objeto no soporta esa propiedad o método. ¿Es que no se puede modificar por código una columna del DBGrid?. La documentación dice que si, pero yo no lo he conseguido. En cambio, si que puedo acceder a ella para imprimirla desde la ventana de debug

  Respuesta:  VICTOR HUGO PEREZ APONTE
Hay varias GRID, posiblemente a la Grid que tu te referes es a MSFLEXGRID, o su prima MSHFLEXGRID, estas grid son solamente para lectura, nunca podras modificar, eliminar o agregar registros directamente sobre ella.
Existe otra GRID, la cual puedes realizar cualquier tipo de operacion de actualizacion y esa grid es DATAGRID, yo la estoy utilizando precisamente por eso, porque puedo actualizar los registros atraves de ella. En los codigos fuentes de la web del programador, busca minusiosamente unos programas echos con DATAGRID, Y OBSERVA EL CODIGO FUENTE PARA QUE LA PUEDAS TRABAJAR

  Respuesta:  Marcelo Sanhueza
EN realidad el modificar un dato o registro de dbgrid, es poco usual, cuando quieras usar grillas ocupa el msflexgrid que es mucho mejor y pedes manejar las columnas con:
MSFLEXGRID.COL= 1 ' hace mencion a el numero de la coumna que quieres modificar y las filas MSFLEXGRID.ROW= 1 hace mencion al numero de la fila que quieres modificar

  Respuesta:  Alex Abreu
Bueno cada vez que yo quiero actualizar un dbgrid para ver los datos devueltos por la condicion lo que hago es:

mibasededatos.refresh
dbgrid1.resfresh

  Respuesta:  Elisa Basanta
Si el objeto contiene datos de más de una tabla no te deja actualizarlo. Yo tengo muy poca experiencia en VB y me da el mismo error con un control llamado vaSpread.
Lo único que he visto es que si el objeto contiene datos de una sola tabla, si me deja actualizarlo.
Set v_dynaset = v_base_datos.dbCreateDynaset(Obtener_Sql(33), ORADYN_ORAMODE)
v_dynaset.dbmovefirst
For i = 1 To vaSpread1.MaxRows
vaSpread1.Row = i
vaSpread1.Col = 6 (modificada si/no)
If vaSpread1.Value = True Then
vaSpread1.Col = 4
v_dynaset1.dbEdit
v_dynaset1("codigo").Value = vaSpread1.Value 'mete nuevo codigo
v_dynaset1.dbUpdate
End If
Next i
No es la mejor solución pero es la única que yo he visto hasta ahora.

  Respuesta:  Obelix
Este segmento de codigo lo tengo insertado en un evento Activate de un form, y funciona perfectamente, echale un vistazo!. datPrimaryRS es un control data insertado en el formulario y al cual está asociado el dbgrid nombres es un recordset que apunta a una base de datos cobol.
While Not datPrimaryRS.Recordset.EOF
codtarj = CLng(datPrimaryRS.Recordset.Fields("Codigotarjeta").Value)
nombres.FindFirst "[CodFicha] = " & codtarj
If Not nombres.NoMatch Then
nom = nombres.Fields(1).Value
Else
nom = "desconocido"
End If
datPrimaryRS.Recordset.Edit
datPrimaryRS.Recordset.Fields("Trabajador").Value = nom
datPrimaryRS.Recordset.Update
datPrimaryRS.Recordset.MoveNext
nombres.MoveFirst
Wend

  Respuesta:  Fernando Berenguer Doméne
Yo estuve intentándolo unos dos meses, haciéndole mil y una pruebas.  Si te funciona con el ejemplo que te ha pasado el colega Obelix no busques más.  Yo tuve que pasarme a Visual Basic 5.0.  Al parecer la versión 4 salió con el control DBGrid sin posibilidad de modificar los datos que había en las celdas, desde código.  O al menos eso me dijeron a mí.