No se actualiza la base de datos automáticamente al guardar

fede_orla
22 de Noviembre del 2009
Hola a [email protected]:

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

mvallejos
22 de Noviembre del 2009
Eso pasa por usar access para programas en red... access es una herramienta de escritorio, de oficina.
De todos modos, despues de grabar un dato, fijate la forma de efectuar un retardo, un bucle con Doevents y después si, reejecutar el recordset que alimenta la grilla.

Una pregunta ? estás modificando o agregando datos desde un control Data ADODC ?
Si la repuesta es si, ese en el problema.

Saludos