No se puede actualizar el cursor nombTabla (read only)

Antes que nada te quiero agradecer tu atención y tiempo.
Te comento la situaci{on, estoy con un sistema una poco robusto en vfp, consta de un form principal que tiene un pageframe y cada page tiene su grid de datos vinculada a su respectiva tabla. Para insertar, modificar y eliminar registros de la tabla tengo botones (uno para cada acción), al momento de correr mi .prg principal hace todo bien (SQL: insert, update, delete) y se actualiza en el grid y todo marcha bien.
El problema es cuando compilo la app en .exe, ya que me sale el error:
"no se puede actualizar el cursor _nombreTabla_, ya que es de solo lectura"
El problema es que esto lo marca en las lineas donde tengo insert o update (insert into __ values (x, y, z)), no en la que hago consultas con cursores (select * from __ into cursor xyz)
Ah antes de insertar o modificar llamo a un método que me "prepara todo" para trabajar sobre la tabla, este meetodo tiene:
CURSORSETPROP('Buffering', 5, 'tabla')
Y al terminar la transaccion (si se realiza de manera correcta), despues del insert o update ejecuto:
TABLEUPDATE(0, .F., 'tabla')
Pero en ningún momento llega a esta liena, ya que me lo marca cuando hago la operación (insertar, modifica o borrar) de manera temporal con el buffer.
Espero me puedas ayudar a saber por que me marca este error, comprendo que vfp trabaja con tablas temporales (cursores)
Te agradezco de antemano tu atención, cualquier cosa quedo a tu disposición.

1 respuesta

Respuesta
Disculpa la tardanza en contestarte.. he estado un poquitín ocupado je je! A ver... ¿trabajas con un cursor? ¿Cómo lo creas? Imagino que debe ser algo así:
SELECT campo1, campo2 from Tabla1 INTO CURSOR miCursor
Para que el cursor pueda actualizarse, es decir, ser de lectura y escritura... debes agregar al final READWRITE
SELECT campo1, campo2 from Tabla1 INTO CURSOR miCursor READWRITE
Ves! :)
Proba y me avisas!
Muchas gracias experto.
No hago uso de cursores - al menos no directamente (into cursor..) - sino que al poner las sentencias SQL Update, Insert, Delete... Es cuando viene el problema, sin necesidad de que yo delcare el cursor explícitamente. Unicamente llamo a la sentencia requerida y me hace todo bien (ejecutándolo desde VFP) ya que tengo vinculada el grid a la tabla, y si me realiza bien las tareas de acuerdo a las lineas del BUffer (si me revierte los cambios si ocurre algún error o me los guarda si todo sale bien), pero al compilarlo y correrlo no llega a las lineas del buffer (marca error en las lineas SQL, lo comprobé cuando depure paso a paso).
Ok, y suponiendo que tengo que agregar readwrite, se lo pongo al final de los insert, ¿update etc...?
insert into tabla values (x,y,z...) ¿into cursor miCursor READWRITE?
¿Algo así?
Tiene sentido la respuesta, pero mi duda es ¿por que solo me marca este error al tener compilada la aplicación en .exe
Muchas gracias
Uhmm! Verifica, en tu carpeta del proyecto, que la tabla (.dbf) a la cual haces referencia con tus comandos INSERT, UPDATE, DELETE... en sus propiedades (click derecho sobre el archivo .dbf, propiedades) no tiene marcada la opcion de atributos de "SOLO LECTURA". Esa podría ser la causa del porque de tu problema. El archivo no debe estar marcado como de lectura!
Proba y me avisas!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas