Actualizar tabla mediante cursor

Quisiera saber como hago para actualizar una tabla mediante un cusrsor. Te explico lo que quiero hacer. Tengo una tabla que se llama "reparaciones" en esta tabla gurdo los datos de reparacione que se hacen a los vehículos como ya sea chapa, pintura, repuestos(ojo no son campos estos, son datos que seguardan a modo de ejemplo). Dentro de un formulario creo un cusor donde traigo todos los datos de un vehículo en particular con todas las reparaciones, estas se reflejan en un grid y a este grid que es el cursor le sigo agregando datos nuevos. Ahora la pregunta es como hago para guardar en la tabla reparacione los datos nuevos ingresados en el cusror y no que se agreguen todos los que tiene el cursor.

1 Respuesta

Respuesta
1
El cursor soporta todos los mismos tratamientos de una tabla normal, si tienes un cursor que es actualizado en un grid, cuando quieras guardarlos lo único que deberás hacer es recorrerlo y grabar los datos, te doy un ejemplo sencillo, supongamos que tienes un cursor que tenga solo tres campos,
Código cliente, nombre y observaciones, y solamente quieres grabar las observaciones en la tabla física de donde proviene, pues en la tabla no quieres que se alteren el campo código ni nombre, entonces esto seria así
*-
thisform.grid1.recordsource = ' '
select codigo,nombre,obs from clientes into cursor tempClientes readwrite
thisform.grid1.recordsource = 'tempCLientes'
thisform.grid1.column1.readonly = .t.  &&ponemos solo lectura las dos primeras columnas
thisform.grid1.column2.readonly = .t.
Bueno, con esto tu grid esta cargado del cursor creado a partir de la tabla clientes, ahora bien cuando deseas grabar lo único que haces es recorrerlo e ir actualizando la tabla clientes, algo así
se le tempClientes
go top
do while ! Eof()
        xObs = tempClientes.obs
       xCodigo = tempClientes.codigo
       Sele clientes &&esta es la tabla fisica maestra
replace obs with xObs for codigo=xCodigo
sele tempClientes
skip
enddo
Y listo, es un camino un poco largo pero por cuestiones pedagógicas te di este ejemplo, luego tu puedes hacer las cosas más fáciles, puedes usar funciones que actualicen globalmente, vistas etc, pero lo importante es que entiendas como gatear antes de caminar o correr.
Me parece perfecta tu respuesta. Y te comento que ya tengo rutinas que recorren tablas y van actualizando los datos en una tabla maestra y funcionan perfecta, eso lo tengo muy claro. Lo que yo quería era justamente evitar esa rutina y remplazarla con una sentencia.
Por ejemplo cuando utilizamos el append from para trer los datos al cursor. A eso me refería.
Ah, bueno, en ese caso como también ya te mencione hay muchas formas, por ejemplo con append from
se le miCursor
xDbf = dbf('micursor')
Se le mi tabla
Append from (xDbf)
Con esto se agrega en grupo los datos, pero no se actualizan, ojo, solo se agregan al final, ahora bien hay otras formas parecidas a mi ejemplo es
Se le micursor
Scan
         Scatter to m
        Sele mitabla
        Append blank
         Gather from m
Endscan
Como ves es muy corto y muy fácil gracias a scatter y gather
Y la ultima que creo que es lo que tu buscas es creando una vista, y que la vista envíe actualizaciones a tu db, así vinculas la vista a tu grid, pones solo lectura las columnas de tu grid que no quieras que sean modificadas y luego le das requery() para grabar los cambios, si no tienes experiencia puedes buscar algún curso de vistas por que aquí no podre explicártelo todo, ahora que recuerdo también puedes vincular tu tabla directamente a tu grid abriendo en modo de actualización de buffer y luego actualizas la tabla cuando quieras o descartas los cambios, para ello debes mirar la función
=CURSORSETPROP("Buffering", 5, "miTabla")
EN realidad hay varias formas de hacerlo y cada uno nos da una posibilidad, se utiliza lo que se necesita por la situación del momento

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas