Visual Basic - No se actualiza la base de datos automaticamente a

Life is soft - evento anual de software empresarial
   
Vista:

No se actualiza la base de datos automaticamente a

Publicado por Federico (6 intervenciones) el 16/11/2009 10:38:56
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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:No se actualiza la base de datos automaticament

Publicado por Pedro Luis (878 intervenciones) el 16/11/2009 10:55:53
El problema de los bloqueos lo tengo solucionado con un Timer con Interval=15.000 o sea 15 segundos y ejecutando en ese intervalo
DBEngine.Idle dbRefreshCache, el intervalo lo puedes rebajar a 10 o 5 segundos si fuera necesario.

Private Sub Timer1_Timer()
DBEngine.Idle dbRefreshCache
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No se actualiza la base de datos automaticament

Publicado por Federico (6 intervenciones) el 18/11/2009 09:00:48
Muchas gracias Pedro Luis.

Estoy haciendo pruebas y ¡¡ PARECE QUE FUNCIONA !!.

MIL GRACIAS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar