1
« en: Lunes 16 de Noviembre de 2009, 11:09 »
Hola a tod@s:
Estoy haciendo una aplicación con Visual Basic que almacena registros en una base de datos Access 2000, pues bien, mi problema es el siguiente:
Tengo en un formulario un DataGrid asociado con un Adodc. Mientras que se están consultando los datos leo los mismos de un disco de la red, pero por problemas de bloqueos entre usuarios, cuando se quieren modificar estos datos, hago una copia en un disco local de los mismos y recargo el Adodc para que lea de local, hasta aquí va todo perfecto.
El problema llega cuando el usuario da la orden de guardar:
1.- Ejecuto UpdateBatch. Pero no actualiza los datos inmediatamente en la base de datos. Lo hace pasados unos segundos.
2.- Borro los datos anteriores de la red. Esto OK.
3.- Ejecuto una consulta para traspasar los datos del disco local al disco de la red, pero como todavía no se han actualizado los datos en el disco local (paso 1.-), se graban de nuevo los datos originales.
Esto se puede solucionar de 3 formas:
- Trabajando siempre en Red, ya que aunque tampoco grabe los datos inmediatamente, tras unos instantes el usuario ya verá sus datos grabados. Pero esta solución no es viable ya que son muchas personas a la vez trabajando con la misma tabla con ADO y da errores de bloqueo constantemente.
- Que el usuario, tras actualizar algún dato, espere 2 o 3 segundos antes de dar la orden de guardar. Lógicamente no es viable.
- Programando una pausa entre el paso 2 y 3 de 2 ó 3 segundos (sleep 3000). Pero eso no le gusta al usuario, ya que necesita grabar mucha información en poco tiempo y además ¿quién me asegura a mí que tras 3 segundos sí se han actualizado realmente los datos y no necesite 4 ó 5 segundos?.
La configuración de mi Adodc es:
adodc.ConnectionString= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:Temporal.mdb;Mode=ReadWrite;Persist Security Info=False;Jet OLEDB:Database Password=1234"
adodc.CursorLocation = adUseClient
adodc.CursorType = adOpenStatic (he probado también con adOpenDynamic y con adOpenKeyset)
adodc..LockType = adLockBatchOptimistic (he probado también con adLockOptimistic y con adLockPessimistic)
Alguien sabe como obligar a que tras dar la orden de UpdateBatch grabe al momento en la base de datos y no tenga que hacer yo pausas en el programa.
Muchas gracias de antemano.
Federico