Comprobar que una BBDD Access no esté abierta desde macro Excel

30/11/2009 - 09:40 por Seepy | Informe spam
Hola a todos, os comento el problema que tengo:
Dispongo de un excel con varias llamadas a un BBDD Access con tal de
traerme información para unas cuantas tablas dinámicas. Las llamadas
las hago de la siguiente forma:

Select Case hoja
Case "Hoja1"
'codigo para comprobar si la BBDD está en uso...
ActiveSheet.PivotTableWizard SourceType:=xlExternal,
SourceData:=Array(SQL1), Connection:=Array("ODBC;DSN=MS Access
Database;DBQ=Ruta_donde_tengo_la_BBDD
\BBDD.mdb;DefaultDir=Nombre_de_la_BBDD;DriverId%;FIL=MS
Access;MaxBufferSize@96;PageTimeout;")
Case "Hoja2"
'codigo para comprobar si la BBDD está en uso...
ActiveSheet.PivotTableWizard SourceType:=xlExternal,
SourceData:=Array(SQL2), Connection:=Array("ODBC;DSN=MS Access
Database;DBQ=Ruta_donde_tengo_la_BBDD
\BBDD.mdb;DefaultDir=Nombre_de_la_BBDD;DriverId%;FIL=MS
Access;MaxBufferSize@96;PageTimeout;")
Case "Hoja3"
'codigo para comprobar si la BBDD está en uso...
ActiveSheet.PivotTableWizard SourceType:=xlExternal,
SourceData:=Array(SQL3), Connection:=Array("ODBC;DSN=MS Access
Database;DBQ=Ruta_donde_tengo_la_BBDD
\BBDD.mdb;DefaultDir=Nombre_de_la_BBDD;DriverId%;FIL=MS
Access;MaxBufferSize@96;PageTimeout;")

El problema viene cuando, tras realizar la primera de las llamadas,
paso a la siguiente y según parece la BBDD se queda como "abierta",
entonces me lanza un error de automatización -21474417848 (80010108),
el cual según parece trata de acceder a la BBDD, pero como está
abierta... además aparece siempre en el directorio donde tengo la BBDD
un fichero con el mismo nombre que la BBDD, pero con extensión .lbd,
que cuando lo borro manualmente, me permite funcionar correctamente.

Ahora bien, lo que me gustaría que me ayudarais es a comprobar antes
de hacer la llamada a la BBDD si está abierta y en caso de que así
sea, cerrarla o eliminar este fichero .lbd, para evitarme estos
errores que me están dando un gran dolor de cabeza.

Muchas gracias por adelantado. Un saludo a todos!
 

Leer las respuestas

#1 Héctor Miguel
01/12/2009 - 04:07 | Informe spam
hola, !

... varias llamadas a un BBDD Access con tal de traerme informacion para unas... tablas dinamicas.
Las llamadas las hago de la siguiente forma: ... (codigo al final ...)
El problema viene cuando, tras realizar la primera de las llamadas, paso a la siguiente
y segun parece la BBDD se queda como "abierta", entonces me lanza un error de automatizacion -21474417848 (80010108)
el cual segun parece trata de acceder a la BBDD, pero como esta abierta...
ademas aparece siempre en el directorio donde tengo la BBDD un fichero con el mismo nombre que la BBDD
pero con extension .lbd, que cuando lo borro manualmente, me permite funcionar correctamente.
Ahora bien, lo que me gustaria que me ayudarais es a comprobar antes de hacer la llamada a la BBDD si esta abierta
y en caso de que asi sea, cerrarla o eliminar este fichero .lbd, para evitarme estos errores que me estan dando un gran dolor de cabeza.



1) si borrar el archivo "fantasma" resuelve todos tus problemas de conexion (?), prueba con una linea +/- como esta:

if (dir("ruta completa donde se genera el archivo .LDB") <> "" then kill "ruta completa donde se genera el archivo .LDB"

2) comprobar si el archivo que consultas (DDBB de access) esta "abierto aun", podria requerir de que informes mas detalles (p.e.)

a) el metodo PivotTableWizard (aunque no presenta al asistente)... CREA el origen (o re-defne el arreglo) de una TD
es lo mismo que usar el asistente para casi-casi empezar desde CERO la definicion y el arreglo de los campos de la TD
REQUIERE: que la hoja donde se ha de activar el asistente...
o NO contenga ninguna TD (dicha hoja se auto-activa despues del asistente) o...
o SEA la hoja activa y la primer celda de la TD este como activa -tambien-
de lo contrario, el metodo PovotTableWizard fallara !!!

b) dentro del cripticismo de algunas fracciones de la fraccion de codigo que expones...
- no queda claro si esta parte (la conexion de tu cadenas): "...;DefaultDir=Nombre_de_la_BBDD;..."
esta haciendo referencia AL NOMBRE de la DDBB, o... A LA RUTA donde esta almacenada (???)
- tampoco es claro si se trata de la misma DDBB o que es lo que cambia "segun" el case ("hoja1", etc.) -???-

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ (fraccion d)el codigo expuesto __
Select Case hoja
Case "Hoja1"
'codigo para comprobar si la BBDD esta en uso...
ActiveSheet.PivotTableWizard SourceType:=xlExternal, SourceData:=Array(SQL1), Connection:=Array("ODBC;DSN=MS Access Database;DBQ=Ruta_donde_tengo_la_BBDD\BBDD.mdb;DefaultDir=Nombre_de_la_BBDD;DriverId%;FIL=MS Access;;PageTimeout;")
Case "Hoja2"
'codigo para comprobar si la BBDD esta en uso...
ActiveSheet.PivotTableWizard SourceType:=xlExternal, SourceData:=Array(SQL2), Connection:=Array("ODBC;DSN=MS Access Database;DBQ=Ruta_donde_tengo_la_BBDD\BBDD.mdb;DefaultDir=Nombre_de_la_BBDD;DriverId%;FIL=MS Access;;PageTimeout;")
Case "Hoja3"
'codigo para comprobar si la BBDD esta en uso...
ActiveSheet.PivotTableWizard SourceType:=xlExternal, SourceData:=Array(SQL3), Connection:=Array("ODBC;DSN=MS Access
Database;DBQ=Ruta_donde_tengo_la_BBDD\BBDD.mdb;DefaultDir=Nombre_de_la_BBDD;DriverId%;FIL=MS
Access;;PageTimeout;")

Preguntas similares