FoxPro/Visual FoxPro - Problemas con el buffering en un cursor

 
Vista:

Problemas con el buffering en un cursor

Publicado por AnaMaria (2 intervenciones) el 17/10/2005 15:07:21
Hola amigos
Tengo el siguiente problema y espero que me puedan ayudar porque de verdad yo no he podido dar con la solución.
Tengo un cursor el cual he creado a través de código. Este cursor se crea a partir de una tabla en una BD de sql server.
Hasta aquí todo bien. Resulta que dicho cursor lo tengo asociado a un datagrid, en un determinado campo a través del
datagrid puedo hacerle modificaciones a dicho campo, lo que quiero es mandar una instrucción a sql que me permita guardar
todos aquellos registros que haya modificado el usuario, pero solo aquellos registros que el usuario haya modificado el campo
de forma que no esté realizando actualizaciones innecesarias. Para ello he encontrado por ahí la función OLDVAL. Bien aquí
es donde comienza mi problema.
Necesito ir recorriendo el cursor para ir comparando el OLDVAL de la columna que el usuario puede modificar con el valor que ella
tiene actualmente de forma que pueda saber si un registro se va a actualizar o no.

Más o menos así:
Select Cursor
do while !eof()
if oldval("campo","cursor") <> valoractual
**actualiza
else
** no actualiza
endif
enddo
Pero es aqui donde viene el problema porque noté que el oldval siempre es el mismo que el nuevo valor que le coloques, entonces
me di cuenta que si colocaba el buffering en 5 entonces ya no tenía problemas. De la siguiente forma:

Select Cursor
SET MULTILOCKS ON
=CURSORSETPROP("Buffering",5, "Cursor" ) && Enable table buffering
do while !eof()
if oldval("campo","cursor") <> valoractual
**actualiza
else
** no actualiza
endif
enddo

De esta forma si soy capaz de guardar el oldval de cada fila y entonces puedo saber si cambio o no. Pero entonces me encuantro con otro problema:
En determinado momento necesito hacer un ZAP sobre el cursor para vaciarlo pero entonces obtengo un mensaje de error que me dice:
"No se puede ejecutar este comando sobre una tabla cuyos objetos Cursor estén en modo de almacenamiento de tablas en buffer".
Entonces dije...ok le coloquo el buffering en 1 antes de hacer el ZAP y listo de la siguiente forma:

=CURSORSETPROP("Buffering",1, "Cursor") &&Error --Las vistas requieren db_bufoptrow o db_bufopttable
ZAP

Entonces estoy en una situación donde de verdad ya no sé que hacer. Espero que me puedan tender una mano. Saludos a todos...
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

RE:

Publicado por Plinio (7841 intervenciones) el 17/10/2005 23:23:16
Yo preferiria usar vistas remotas actualizables, son mas faciles de usar y realizan el proceso automaticamente.
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