Abrir recordset compartidos

Quisiera saber como puedo identificar que un recorset ya está abierto, para abrir un recorset utilizo lo siguiente:
Temporal.CursorType = adOpenKeyset
Temporal.CursorLocation = adUseClient
Temporal.LockType = adLockOptimistic
Temporal.Source = "select * from tablas where clave = " & clave
Temporal.ActiveConnection = Proyecto
Temporal.Open
En TEMPORAL abro todos los registros de TABLA que concuerden con CLAVE, quisiera saber si existe una forma de abrir estos registros de modo exclusivo para que no permita que otro usuario los abra para modificarlos mientras permanezca abierto.
2

2 Respuestas

5.675 pts. Programador Visual Basic,Crystal Reports, acceso a datos ADO
Para saber si un recordset ya esta abierto puedes utilizar la propiedad "state", y para bloquear esos registros puedes hacerlo con la propiedad "locktype". Léete la documentación sobre estas dos propiedades más a fondo porque probablemente encuentres la solución a lo que buscas. Si necesitas más aclaraciones sobre el tema coméntamelo, porque no termino de entender que es exactamente lo que quieres, si saber el estado del recordset o digamos hacer desaparecer temporalmente ciertos registros de cara al resto de usuarios mientras están siendo utilizados.
Lo que pretendo hacer es lo segundo que comentas, "desaparecer" temporalmente ciertos registros al resto de los usuarios mientras están siendo utilizados por otro usuario.
Tengo 3 archivos que interactúan entre sí, CARGOS, ABONOS e INTERESES, donde guardo los movimientos de una CUENTA, lo que pretendo es lo siguiente:
Si un usuario mantiene abierto el módulo de ABONOS de la CUENTA 001, no permita que otro usuario pueda agregar, borrar o cambiar los abonos de esa cuenta, hasta que el primero cierre ese módulo...
¿Alguna idea de cómo realizar eso...?
Excelente respuesta, muchas gracias
Bien si lo que pretendes es bloquear registros, creo que las solución la tienes en la forma de abrir los diferentes recordset. Generalmente todos lo abrimos como "optimistic" pero en tu caso la opción parece clara que es "pesimistic", sobre la marcha no me acuerdo si abriéndole de esta forma no deja leer tampoco al resto de usuarios, pero desde luego no va a dejar eliminar, ni modificar esos registros. El problema de esto es que tienes que hacerlo con mucho cuidado dado que si bloqueas muchos registros a los que se accede habitualmente por mucho usuarios, vas a tener el problema de bloqueos entre ellos. Pero desde luego la solución pasa por la forma en la que abres los diferentes recordset. Sino no te sirve esto, no te quedara otro remedio que saber TU, con un indicador o algo, que registros se deben mostrar y cuales no. En este caso te aconsejaría que utilizases recordsets desconectados y a continuación cuando ya tengas tu conjunto de registros añadirle un campo en el que indiques que no se pueden leer por el resto.
1.065.925 pts. Soy una persona multifacética, tanto manejo la...
Un recordset es una colección de datos, pueden ser modificados o no.
Si utilizas esto y quieres bloquear la información tendrías que iniciar una transacción a nivel de tu conexión, pero si tu usuario no guarda, actualiza o cierre la información de trabajo, los demás usuarios no van a poder trabajar.
Sugiero que evalúes bien en que forma vas a trabajar con estos datos.
La propiedad del recordset sería state.
Esa es la forma en la cual pretendo trabajar los datos, mira, voy a ilustrar un poco mi aplicación.
En mi proyecto uso una tabla (INTERESES) la cual genero a partir de otras dos, CARGOS y ABONOS, de determinada CUENTA, por lo que no quiero controlar para que solamente un usuario haga movimientos en una CUENTA, de manera que si un usuario está capturando, editando o borrando registros de CARGOS en la CUENTA 001, nadie más pueda hacerlo.
En cualquier conexión a base de datos, puedes generar una transacción, como comentas, tienes que bloquear los datos de la cuenta que mencionas, cuando tienes una transacción al realizar un simple select de información, con esto bloqueas los datos de toda la tabla que mencionas y hasta que terminas puedes continuar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas