Problema con Operador Cursor

Saludos,
Tengo el siguiente problema
Cuando cargo el formulario tengo un grid donde carga todos los registros de una tabla (responsable.dbf), para cargar el grid en el formulario en el evento activate cargo el sgt código:
ThisForm.GridResp.RecordSource="select * from responsable into cursor Cresponsable"
tambien tengo un boton q dice eliminar, cuando elimino registros q se cargaron al momento de cargar el formulario todo funciona normal, el codigo es el comando eliminar evento click es el sgt:
thisform.gridresp.RecordSource="delete from responsable where codi_resp=Cresponsable.codi_resp"
pack
thisform.gridresp.RecordSource="select * from responsable into cursor Cresponsable"
thisform.refresh
ahora tambien tengo otro boton q dice agregar donde tengo q ingresar el dato de la persona y el campo primario se autogenera. El codigo q le puse en el boton agregar evento click es el sgt:
select val(max(codi_resp)) as codmax from responsable into cursor Cresponsable
NueCodi=padl(alltrim(str(Cresponsable.codmax+1)),3,'0')
thisform.text3.value=NueCodi
thisform.gridresp.recordsource= "insert into responsable values('"+ NueCodi +"','"+ thisform.text1.value +"')"
thisform.gridresp.recordsource="select * from responsable into cursor Cresponsable"
thisform.refresh
hasta aca todo bien, PERO cuando agrego registros con el boton agregar y de ahi quiero borrarlos con el boton eliminar me sale un mensaje de error, el cual es el siguiente:
"la operación no es valida para el operador cursor"
¿A qué se debe este error?
¿Y cómo hago para solucionarlo?
Muchas gracias de antemano

3 Respuestas

Respuesta
1
Te voy es responder
Para la primera pregunta :
Este error se presenta porque la propiedad RECORDSOURCE de la grilla reibe una cadena, pero no una cadena cualquiera, debe de ser una cadena SQL, del tipo SELECT ...
LO que estas haciendo al momento de insertar o borrar es asignar una instrucción SQL del tipo INSERT, DELETE o UPDATE que no devuelven ningún resultado porque son consultas de modificación, en tal caso si deseas insertar o borrar, o modificar datos, NO ES NECESARIO QUE ASIGNES ESTAS INSTRUCCIONES A LA PROPIEDAD RECORDSOURCE DE LA GRILLA simplemente ejecutalos sin más
Para el botón insertar:
insert into responsable values('"+ NueCodi +"','"+ thisform.text1.value +"')
hisform.refresh
*observa que para nada *menciono la grilla
Me cuentas como te fue
Gracias, me fue de mucha ayuda. Ahora te agradecería me expliques
- ¿La diferencia entre vistas y emplear cursor?
- ¿En qué momento emplearía una y otro?
Gracias
La diferencia es como la noche del día :
Las vistas pueden hacer todo lo que hace un cursor y todavía más.
Un cursor es simplemente un conjunto de datos, ya sea extraído de una instrucción SELECT, el problema es que no puedes modificar sus datos
Las vistas también son cursores de datos pero ellas están preparadas para actualizar datos, cosa que no puedes hacer con un cursor. Addemas las vistas usan el Buffer de datos, que te permite hacer modificaciones en ememoria, cambios sin confirmar, luego si te equivocas puedes revertir estos cambios, pasada esta etapa si estas seguro qde que estos cambios son definitvos recién puedes confirmarlos a disco. ADEMAS EL buffer de datos te ayuda una inmensidad en aplicaciones Multiusuario porque reduce el trafico de red y no tienes que estar bloqueando tablas y registros al momento de actualizar datos.
La vistas pueden ser
Locales
Los datos de la vista son datos de tablas locales
Remotas
Datos de servidores remotos, necesitaras definir una conexión para que este tipo de la vista pueda trabajar
. Hay vistas que combinan datos remotos y datos locales en una sola grilla por ejemplo
Fueras de linea
Aquellas vistas con las que puedes trabajar los datos en casa, al moomento de llegar al trabajo te comnectas al servidor y envía las actualizaciones por BATCH, o por lote.
No olvides que las vistas no se guardan en disco, se alamcenan en el archivo DBC, en el diccinario de datos al igual que los Store Procedures. Porl lo tanto para usar vistas necesariemente tienes que dejar de trabajar con tabas libres y usar bases de datos
Un saludso Freddy
Respuesta
1
A bueno lo revise y lo veo bien en todas las rutinas que me presentaste revisaste los eventos de la pantalla parece ser por el tipo de error el evento al botonde agregar donde termina el cursor al momento porque el mimo debería estar en el boetne de guardar bueno necesitaría ver es la pantalla
te recoemindo lawebdelprogramador.com
Respuesta
La instrucción de eliminación lo tienes que ejecutar por fuera:
delete from responsable where codi_resp=Cresponsable.codi_resp"
es decir, no como parte del "recordsource"
Para que lo refresques tienes que ejecutar nuevamente la instrccion SQL

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas