Recordset en DAO

El tema es el siguiente:
Al establecer una conexión DAO por ODBC a una base de datos SQL Server (pasando por microsoft jet), ocupo objetos querydef; o sea, paso la conexión a un querydef por cada consulta que realizo, ejemplo:
Set base = OpenDatabase(" ", False, False, "ODBC;DRIVER=SQL Server;SERVER=(local);DATABASE=master;UID=sa;PWD=;DSN=conexion_sql")
Set consulta_sql = base.CreateQueryDef("")
consulta_sql.Connect = base.Connect
consulta_sql.SQL ="select * from tabla"
Set RecSet = consulta_sql.OpenRecordset()
consulta_sql.Close
El problema es que trabajo con los recorset como arreglos en memoria para desplazarme por los registros, pero al modificar un registro establezco un requery para el recorset y al parecer el tipo de conexión no lo soporta.
El error que arroja es el siguiente:
('Error 3251' en tiempo de ejecución:
Operation is not supported for this type of object)
¿Existe alguna otra forma de actualizar el recorset? No utilizando el requery...
¿O QUIZÁS ME FALTA ALGO PARA REFRESCAR ÉSTE (recorset)?
En espera tu respuesta y agradeciendo de antemano cualquier sugerencia al tema descrito, se despide
Ricardo.-

2 respuestas

Respuesta
1
La linea del error te dice justamente lo que sucede, el objeto no soporta ese tipo de comandos, calculo que puede venir dado por varios motivos, que no tengas los permisos necesarios para modificar la base de datos en el servidor, y solo te permite modificar el registro en memoria, pero lo que más me llama la atención es que segunn la instrucción de apertura del recordset no estableces que tipo de cursor será ni bloqueos de ningún tipo, esto puede ser lo que genera el error ya que no puede determinar como debe bloquear usuarios registro para si actualización a la tabla original.
¿Por qué usas los registros en memoria? ¿Para qué sea más rapido?
sql server es bastante rapido como para consumir recursos del sistema y alentar los procesos.
Respuesta
1
A ver te cuento, aunque estoy de vacaciones y miré el correo de casualidad:
Veo que utilizas DAO: Esta tecnología está en completo desuso y tiene ya más de 10 añitos, por lo que te recomiendo pases a utilizar ADO (ActiveX Data Object), que es bastante más actual, depurado y potente, entre otras características. Por otra parte, y examinando el código que me envías, veo que partiendo de un querydef intentas abrir un recordset, lo cual es algo ambiguo. De todas formas, entiendo que haces un requery de un recordset estático, y si al abrirlo recuperaste 10 registros, por poner un ejemplo, pues aunque todos lo demás usuarios de la aplicación se líen a dar altas en la tabla que tu has abierto, no podrás verlas hasta que no efectúes otro método open que acceda a la DB y recupere datos. Por otra parte, y si lo que deseas es hacerle update al recordset que has abierto, debes abrirlo con el parámetro DBOPENDYNAMIC, que es el modo de apertura dinámico DAO que permite actualizaciones en el conjunto de registros recuperado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas