Consulta a access abierto
Tengo un archivo en asp que hace consultas en sql a una base de datos de access. Las consultas funcionan mientras no se abra el archivo de access, pero cuando alguien abre el archivo de access las consultas desde asp no funcionan. Sale un error que dice:
No se puede abrir la clave 'Temporary (volatile) Jet DSN for process 0x56c Thread 0x8bc DBC 0x219eebc Jet' del Registro.
La base de datos está en modo compartido y está en un servidor y las consultas se hacen desde cada equipo. No hay problemas si dos personas abren directamente el archivo de access y ven los registros, por lo del modo compartido, pero no entiendo por qué no funciona cuando se consulta desde asp si el archivo de access está abierto.
No se puede abrir la clave 'Temporary (volatile) Jet DSN for process 0x56c Thread 0x8bc DBC 0x219eebc Jet' del Registro.
La base de datos está en modo compartido y está en un servidor y las consultas se hacen desde cada equipo. No hay problemas si dos personas abren directamente el archivo de access y ven los registros, por lo del modo compartido, pero no entiendo por qué no funciona cuando se consulta desde asp si el archivo de access está abierto.
1 Respuesta
Respuesta de oscarlmv
1
1
A tener en cuenta por lo que indicas, referente a que dos usuarios abran la aplicación en modo compartido sin problemas, está claro que el problema radica muy posiblemente en que la conexión que haces desde la página Asp a la BBDD la haces en modo exclusivo.
Confirma la cadena de conexión que utilizas para acceder a la página asp, ya que seguramente tienes algo en ella ue se te está pasandop por alto.
Yo tengo páginas asp que tiran de BBDD de Access y de otros servidores de datos (AS400 por ejemplo) y no tengo ningún problema abra o no las mismas BBDD en otro equipo desde el access directamente. Es más, estaba seguro de ello, pero acabo de confirmarlo haciendo una prueba con una de mis BBDD, y sin problema.
No se que más puedo decirte... Confirma lo que te digo y si parece estar todo correcto posteame las lineas de código que utilizas en la página asp para conectar con la BBDD, a ver si veo algo raro...
Confirma la cadena de conexión que utilizas para acceder a la página asp, ya que seguramente tienes algo en ella ue se te está pasandop por alto.
Yo tengo páginas asp que tiran de BBDD de Access y de otros servidores de datos (AS400 por ejemplo) y no tengo ningún problema abra o no las mismas BBDD en otro equipo desde el access directamente. Es más, estaba seguro de ello, pero acabo de confirmarlo haciendo una prueba con una de mis BBDD, y sin problema.
No se que más puedo decirte... Confirma lo que te digo y si parece estar todo correcto posteame las lineas de código que utilizas en la página asp para conectar con la BBDD, a ver si veo algo raro...
Hola, he leído tu respuesta.
Creo que el error puede andar por ahí. Las conexiones que suelo hacer a la base de datos son como esta:
Set Conn = Server.CreateObject("ADODB.Connection")
sConnection =("Driver={Microsoft Access Driver (*.mdb)};uid=;pwd=;DBQ=d:\Inetpub\wwwroot\prueba\camaras.mdb")
Conn.Open(sConnection)
Es decir, utilizando ADODB e indicando la ruta. En otras conexiones voy a ODBC y creo una conexión como aquí:
Set Conn = Server.CreateObject("ADODB.Connection")
'Conn.Open "concamaras"
concamaras es el nombre que le doy en ODBC.
En este momento no dispongo de todo el código porque no estoy en la empresa. En cuanto disponga de el te lo envío.
Muchas gracias
Creo que el error puede andar por ahí. Las conexiones que suelo hacer a la base de datos son como esta:
Set Conn = Server.CreateObject("ADODB.Connection")
sConnection =("Driver={Microsoft Access Driver (*.mdb)};uid=;pwd=;DBQ=d:\Inetpub\wwwroot\prueba\camaras.mdb")
Conn.Open(sConnection)
Es decir, utilizando ADODB e indicando la ruta. En otras conexiones voy a ODBC y creo una conexión como aquí:
Set Conn = Server.CreateObject("ADODB.Connection")
'Conn.Open "concamaras"
concamaras es el nombre que le doy en ODBC.
En este momento no dispongo de todo el código porque no estoy en la empresa. En cuanto disponga de el te lo envío.
Muchas gracias
De nuevo Luisek!
Me alegro de volver a saber de ti!.
En un principio, teniendo en cuenta el código que me has enviado y que utilizas para la conexión, parece estar claro que no estás abriendo la BBDD desde la página ASP en modo exclusivo...
Ahora, otra cosa que debes comprobar es que no tengas definido por defecto que ese origen de datos la abra de forma exclusiva. Para ello debes irte a Panel de Control/Origenes de datos de Odbc, buscar el origen de datos que utilizas (Microsoft Access Driver (*.mdb)), configurar/Opciones y ver si tienes o no marcado el que este origen de datos abra las BBDD´s de forma exclusiva.
De todos modos, y por otra parte, por la descripción del origen de datos que me detallas estoy casi seguro de afirmarte que estas utilizando los drivers de Access 2.0, lo que te puede traer problemas... Confirma que no es así y que el origen de datos es el de Access 97 /, 2000 según corresponda con el formato de BBDD que utilizas.
Un saludo y ya me contaras algo al respecto. Hasta pronto!
Óscar L.M.V.
Me alegro de volver a saber de ti!.
En un principio, teniendo en cuenta el código que me has enviado y que utilizas para la conexión, parece estar claro que no estás abriendo la BBDD desde la página ASP en modo exclusivo...
Ahora, otra cosa que debes comprobar es que no tengas definido por defecto que ese origen de datos la abra de forma exclusiva. Para ello debes irte a Panel de Control/Origenes de datos de Odbc, buscar el origen de datos que utilizas (Microsoft Access Driver (*.mdb)), configurar/Opciones y ver si tienes o no marcado el que este origen de datos abra las BBDD´s de forma exclusiva.
De todos modos, y por otra parte, por la descripción del origen de datos que me detallas estoy casi seguro de afirmarte que estas utilizando los drivers de Access 2.0, lo que te puede traer problemas... Confirma que no es así y que el origen de datos es el de Access 97 /, 2000 según corresponda con el formato de BBDD que utilizas.
Un saludo y ya me contaras algo al respecto. Hasta pronto!
Óscar L.M.V.
Hola de nuevo.
Muchas gracias por las respuestas, pero
Sigo probando y no me funciona.
Lo de modo exclusivo ya lo sabia y ya lo tenia desactivado. Lo que si que cambié fue la linea de conexión. He utilizado esta linea de conexión:
Set Conn1 = Server.CreateObject ("ADODB.Connection")
Conn1.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Inetpub\wwwroot\casa\bd1.mdb;"
Pero me sale el mensaje:
Microsoft JET Database Engine (0x80004005)
No se pudo usar ''; el archivo ya está en uso.
/casa/prueba.asp, line 11
¿Habrá qué configurar alguna opción en IIS del servidor?.
Muchas gracias, saludos.
Muchas gracias por las respuestas, pero
Sigo probando y no me funciona.
Lo de modo exclusivo ya lo sabia y ya lo tenia desactivado. Lo que si que cambié fue la linea de conexión. He utilizado esta linea de conexión:
Set Conn1 = Server.CreateObject ("ADODB.Connection")
Conn1.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Inetpub\wwwroot\casa\bd1.mdb;"
Pero me sale el mensaje:
Microsoft JET Database Engine (0x80004005)
No se pudo usar ''; el archivo ya está en uso.
/casa/prueba.asp, line 11
¿Habrá qué configurar alguna opción en IIS del servidor?.
Muchas gracias, saludos.
Vamos a ver... Que me empiezo a quedar sin recursos... je je je
Llegados a este punto quizá sea interesante saber, de una vez por todas, si el problema está definitivamente como parce en el acceso de las consultas desde las páginas Asp. Para ello, intenta hacer, si puedes, la siguiente prueba:
- Haz una copia de las páginas Asp que acceden a la BBDD y modificalas para que tras realizar la consulta correspondiente, no cierren la conexión con la BBDD; es decir, que una vez abran la conexión con la BBDD la mantengan abierta hasta que tu quieras (puedes poner un botón en la página que cierra la conexión una vez acabemos las pruebas).
Una vez tengas modificadas las páginas, accede a ellas con el navegador para que se quede abierta la conexión a la BBDD. Una vez hecho esto, abre con otro navegador de nuevo otra página que intente acceder a la BBDD. Si, como creemos, el problema está en que la página ASP abre la conexión en modo exclusivo, este ultimo intento de acceso nos dará un error al no poder acceder. De esta forma ya si que sabemos, al 100 %, que el problema está en el acceso que se hace desde las páginas Asp.
De darte el error, que seguramente te dará, ya sólo tienes que basar tu orientación del problema a 3 cosas:
- Cadena de conexión.
- Origen de datos ODBC.
- Configuración del servidor.
Respecto al primer punto, indicarte que yo, utilizado BBDD formato Access 97 para las páginas ASP, utilizo el origen de datos "MS Access 97 Database (not sharable).dsn", utilizando la siguiente cadena de conexión varios momentos:
Set ConexionBD = Server.CreateObject("ADOdb.Connection")
ConexionBD.Open "Provider=MSDASQL.1;Persist Security Info=False;Mode=Read;Extended Properties=DSN=MS Access 97 Database;DBQ=BBDD.mdb;DriverId=281;FIL=MS Access;FILEDSN=MS Access 97 Database (not sharable).dsn;MaxBufferSize=2048;PageTimeout=5;UID=USUARIO;"
Respecto al segundo punto, sólo debes confirmar, como me consta que ya has hecho, el que el origen de datos no tenga definido abrir la BBDD en modo exclusivo.
Respecto al tercer punto, deberías indicarme que servidor estás utilizando para las páginas Asp. Si utilizas, el más habitual, el "Microsoft Personal Web Server", no hay nada que configurar en este aspecto.
Por ultimo, deberías indicarme para tenerlo en cuenta, si una vez que abres la conexión desde la página ASP, realizas la consulta de datos o lo que desees y cierras la conexión (ConexionBD. Close), o por el contrario la mantienes abierta... Es importante, ya que yo utilizo conexión momentáneamente en mis páginas Asp cerrando éstas tras la ejecución de la sentencia de turno, por lo que si tu por algún motivo no cierras la conexión, podría hacer unas modificaciones y pruebas para ver que ocurre en mi caso de esta forma.
Bueno, echale un vistazo a todo esto y cuéntame, ok ¿?. Un saludo y espero tu respuesta. Hasta pronto!
Óscar L.M.V.
Llegados a este punto quizá sea interesante saber, de una vez por todas, si el problema está definitivamente como parce en el acceso de las consultas desde las páginas Asp. Para ello, intenta hacer, si puedes, la siguiente prueba:
- Haz una copia de las páginas Asp que acceden a la BBDD y modificalas para que tras realizar la consulta correspondiente, no cierren la conexión con la BBDD; es decir, que una vez abran la conexión con la BBDD la mantengan abierta hasta que tu quieras (puedes poner un botón en la página que cierra la conexión una vez acabemos las pruebas).
Una vez tengas modificadas las páginas, accede a ellas con el navegador para que se quede abierta la conexión a la BBDD. Una vez hecho esto, abre con otro navegador de nuevo otra página que intente acceder a la BBDD. Si, como creemos, el problema está en que la página ASP abre la conexión en modo exclusivo, este ultimo intento de acceso nos dará un error al no poder acceder. De esta forma ya si que sabemos, al 100 %, que el problema está en el acceso que se hace desde las páginas Asp.
De darte el error, que seguramente te dará, ya sólo tienes que basar tu orientación del problema a 3 cosas:
- Cadena de conexión.
- Origen de datos ODBC.
- Configuración del servidor.
Respecto al primer punto, indicarte que yo, utilizado BBDD formato Access 97 para las páginas ASP, utilizo el origen de datos "MS Access 97 Database (not sharable).dsn", utilizando la siguiente cadena de conexión varios momentos:
Set ConexionBD = Server.CreateObject("ADOdb.Connection")
ConexionBD.Open "Provider=MSDASQL.1;Persist Security Info=False;Mode=Read;Extended Properties=DSN=MS Access 97 Database;DBQ=BBDD.mdb;DriverId=281;FIL=MS Access;FILEDSN=MS Access 97 Database (not sharable).dsn;MaxBufferSize=2048;PageTimeout=5;UID=USUARIO;"
Respecto al segundo punto, sólo debes confirmar, como me consta que ya has hecho, el que el origen de datos no tenga definido abrir la BBDD en modo exclusivo.
Respecto al tercer punto, deberías indicarme que servidor estás utilizando para las páginas Asp. Si utilizas, el más habitual, el "Microsoft Personal Web Server", no hay nada que configurar en este aspecto.
Por ultimo, deberías indicarme para tenerlo en cuenta, si una vez que abres la conexión desde la página ASP, realizas la consulta de datos o lo que desees y cierras la conexión (ConexionBD. Close), o por el contrario la mantienes abierta... Es importante, ya que yo utilizo conexión momentáneamente en mis páginas Asp cerrando éstas tras la ejecución de la sentencia de turno, por lo que si tu por algún motivo no cierras la conexión, podría hacer unas modificaciones y pruebas para ver que ocurre en mi caso de esta forma.
Bueno, echale un vistazo a todo esto y cuéntame, ok ¿?. Un saludo y espero tu respuesta. Hasta pronto!
Óscar L.M.V.
Hola de nuevo, yo también me quedo sin recursos, je je.
El caso es que he hecho la siguiente prueba. He pasado el archivo de access y el de asp a mi equipo. Y cuando abro la base de datos y luego abro el navegador y ejecuto la consulta no me da error. Y abro un formulario donde modifico datos y al actualizar el navegador (la página asp), los datos se actualizan, es decir, que así funciona cojonudamente.
Ahora te muestro el código de ejemplo con el que estoy trabajando:
<html>
<head>
<title>Pruebas de conexion</title>
</head>
<body>
<%
Set Conn1 = Server.CreateObject ("ADODB.Connection")
conn1.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Inetpub\wwwroot\casa\bd1.mdb;"
response.write("<br>"&"Conectadooo a bd1 "&"<br>")
sql="select producto, tareas, horas from bonos"
set rs = conn1.execute(sql)
do while not rs.eof
%>
<table>
<tr>
<td><%=rs("producto")%></td>
<td><%=rs("tareas")%></td>
<td><%=rs("horas")%></td>
</tr>
</table>
<%
rs.movenext
loop
rs.close
conn1.Close
Set RS = nothing
Set conn1 = nothing
%>
</body>
</html>
Gracias Oscar y saludos
El caso es que he hecho la siguiente prueba. He pasado el archivo de access y el de asp a mi equipo. Y cuando abro la base de datos y luego abro el navegador y ejecuto la consulta no me da error. Y abro un formulario donde modifico datos y al actualizar el navegador (la página asp), los datos se actualizan, es decir, que así funciona cojonudamente.
Ahora te muestro el código de ejemplo con el que estoy trabajando:
<html>
<head>
<title>Pruebas de conexion</title>
</head>
<body>
<%
Set Conn1 = Server.CreateObject ("ADODB.Connection")
conn1.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Inetpub\wwwroot\casa\bd1.mdb;"
response.write("<br>"&"Conectadooo a bd1 "&"<br>")
sql="select producto, tareas, horas from bonos"
set rs = conn1.execute(sql)
do while not rs.eof
%>
<table>
<tr>
<td><%=rs("producto")%></td>
<td><%=rs("tareas")%></td>
<td><%=rs("horas")%></td>
</tr>
</table>
<%
rs.movenext
loop
rs.close
conn1.Close
Set RS = nothing
Set conn1 = nothing
%>
</body>
</html>
Gracias Oscar y saludos
Después de lo que me cuentas, de que en tu equipo funcione perfectamente, está claro que el problema está en el otro equipo donde probabas (creo que era el servidor, no ¿?).
Asegurate de que las páginas Asp, al tomar algunos valores no definidos en la cadena de conexión por defecto, no este realizando la conexión de forma exclusiva al no detallarle lo contrario. Para ello utiliza en la cadena de conexión los siguientes parámetros (el modo es de solo lectura, ya que me ciño al ejemplo que me has enviado):
Mode=Read;Jet OLEDB:Database Locking Mode=0
Confirmate que el servidor tenga los drivers para el nuevo origen de datos que utilizas ("Microsoft.Jet.OLEDB.4.0"), que se llama exactamente así el origen de datos en el servidor (si varia el nombre aunque solo sea en una coma puedes tener problemas) y que esta correctamente configurado (no exclusivo).
Por ultimo, otra cosa a tener en cuenta es la siguiente: He consultado a la gente del Dpto. de Redes de mi empresa (ya que yo pertenezco a Desarrollo y hay algunas cosas que se me escapan...) y me han confirmado que en los servidores, normalmente existe posibilidad de indicar que en un determinado directorio, unidad, equipo, usuario, etc..., los ficheros sean abiertos en modo exclusivo. Confirma también ésto, ya que pueden estar ahí tus quebraderos de cabeza... raro, pero puede ser, y más teniendo en cuenta que lo que te pasa ya de por si es raro...
Yo he estado haciendo mil pruebas con Access 97, VB6, páginas Asp, intentando emular tu funcionamiento y no he conseguido que me de errores, salvo en el caso en el que conscientemente he definido alguno de los accesos a la BBDD como exclusivo. Todo es correcto.
Centrate en la configuración de ese equipo y de la carpeta donde tengas la BBDD y las páginas ASP, de la configuración de origen de datos de ese equipo, ..., por que es ahí donde tienes el problema y debes centrate.
Ahh!, ¿Abras la BBDD de Access desde donde la abras fallan las Asp?. Si solo es cuando determinados equipos abren la BBDD cuando falla, seria conveniente mirar que esos equipos no tengan que habrán las BBDD´s por defecto como exclusivas... A ver si el problema va a estar en los equipos usuarios y no enn tu servidor y páginas Asp...
Ya me contaras.
Asegurate de que las páginas Asp, al tomar algunos valores no definidos en la cadena de conexión por defecto, no este realizando la conexión de forma exclusiva al no detallarle lo contrario. Para ello utiliza en la cadena de conexión los siguientes parámetros (el modo es de solo lectura, ya que me ciño al ejemplo que me has enviado):
Mode=Read;Jet OLEDB:Database Locking Mode=0
Confirmate que el servidor tenga los drivers para el nuevo origen de datos que utilizas ("Microsoft.Jet.OLEDB.4.0"), que se llama exactamente así el origen de datos en el servidor (si varia el nombre aunque solo sea en una coma puedes tener problemas) y que esta correctamente configurado (no exclusivo).
Por ultimo, otra cosa a tener en cuenta es la siguiente: He consultado a la gente del Dpto. de Redes de mi empresa (ya que yo pertenezco a Desarrollo y hay algunas cosas que se me escapan...) y me han confirmado que en los servidores, normalmente existe posibilidad de indicar que en un determinado directorio, unidad, equipo, usuario, etc..., los ficheros sean abiertos en modo exclusivo. Confirma también ésto, ya que pueden estar ahí tus quebraderos de cabeza... raro, pero puede ser, y más teniendo en cuenta que lo que te pasa ya de por si es raro...
Yo he estado haciendo mil pruebas con Access 97, VB6, páginas Asp, intentando emular tu funcionamiento y no he conseguido que me de errores, salvo en el caso en el que conscientemente he definido alguno de los accesos a la BBDD como exclusivo. Todo es correcto.
Centrate en la configuración de ese equipo y de la carpeta donde tengas la BBDD y las páginas ASP, de la configuración de origen de datos de ese equipo, ..., por que es ahí donde tienes el problema y debes centrate.
Ahh!, ¿Abras la BBDD de Access desde donde la abras fallan las Asp?. Si solo es cuando determinados equipos abren la BBDD cuando falla, seria conveniente mirar que esos equipos no tengan que habrán las BBDD´s por defecto como exclusivas... A ver si el problema va a estar en los equipos usuarios y no enn tu servidor y páginas Asp...
Ya me contaras.
Hola Oscar.
He probado lo de Mode=Read;Jet OLEDB:Database Locking Mode=0
Se visualiza la base de datos pero sin Mode=Read. No sé si servirá de algo esto.
Respecto a lo del servidor, si que he indicado en su día que los usuarios de las bases de datos tuvieran permisos de Administradores, porque al principio no dejaba guardar datos en la base de datos abierta desde el equipo que lo abría. Ahora al abrir ya pueden guardar datos.
Lo que no sé es cómo indicar que en un directorio o archivo los ficheros sean abiertos en modo exclusivo o no por determinados usuarios.
He ido a Propiedades de Carpeta (en mi caso carpeta casa, en el servidor) y en la ficha Seguridad y ya está indicado el usuario y el tipo de permisos, con control total, etc. A lo mejor hay que ir por otro lado. Eso no lo sé. Pero no veo nada de "modo exlcusivo".
Todo esto pensando que el fallo pueda venir de ahí.
Ya perdonaras que en algún momento no me explique o no especifique mejor el problema.
Gracias y saludos
He probado lo de Mode=Read;Jet OLEDB:Database Locking Mode=0
Se visualiza la base de datos pero sin Mode=Read. No sé si servirá de algo esto.
Respecto a lo del servidor, si que he indicado en su día que los usuarios de las bases de datos tuvieran permisos de Administradores, porque al principio no dejaba guardar datos en la base de datos abierta desde el equipo que lo abría. Ahora al abrir ya pueden guardar datos.
Lo que no sé es cómo indicar que en un directorio o archivo los ficheros sean abiertos en modo exclusivo o no por determinados usuarios.
He ido a Propiedades de Carpeta (en mi caso carpeta casa, en el servidor) y en la ficha Seguridad y ya está indicado el usuario y el tipo de permisos, con control total, etc. A lo mejor hay que ir por otro lado. Eso no lo sé. Pero no veo nada de "modo exlcusivo".
Todo esto pensando que el fallo pueda venir de ahí.
Ya perdonaras que en algún momento no me explique o no especifique mejor el problema.
Gracias y saludos
No se concretamente el tipo de servidor que tenéis, ni tampoco soy un erudito en este tema... La gente de redes de mi empresa, me ha estado enseñando como es posible ésto para Novell (que es el servidor que tienen aquí) y al menos en este tío de servidor se puede especificar la opción "Shareable" que haría, según me han indicado, el que se abrieran de forma exclusiva los archivos de las carpetas o unidades a las que le demos esta característica.
La verdad es que si definitivamente tu problema va por este camino quizá no sea yo el que mejor pueda ayudarte, ya que como te indico no tengo un gran conocimiento en el tema de configuración y administración de servidores...
De todos modos, si quieres indicame el tipo de servidor que utilizáis allí a ver si la gente de Redes me puede detallar algo más, aunque por desgracia no te puedo asegurar nada...
La verdad es que si definitivamente tu problema va por este camino quizá no sea yo el que mejor pueda ayudarte, ya que como te indico no tengo un gran conocimiento en el tema de configuración y administración de servidores...
De todos modos, si quieres indicame el tipo de servidor que utilizáis allí a ver si la gente de Redes me puede detallar algo más, aunque por desgracia no te puedo asegurar nada...
- Compartir respuesta
- Anónimo
ahora mismo