Hola a todos,
estoy teniendo problemas de bloqueo con una bd Access a la cual accedo a
través de ASP. Esta bd es la que contiene los temas del primer enlace de mi
firma. Mis conocimientos sobre ASP y el funcionamiento de servidores es
bastante limitado. Como no sé qué datos pueden ser útiles para daros alguna
pista, tal vez me enrrolle un poco en mi exposición (pido disculpas por
adelantado).
Primero de todo he de decir que he revisado, vuelto a revisar, recontra
revisar y cambiar el código desde hace un mes aproximadamente, por si en
algún lugar de ese código hubiera algo que dejara un recordset o la conexión
a la bd abiertos, pero sinceramente, no he encontrado nada de eso.
El problema viene porque a ciertas horas del día (sobre todo por la tarde,
pero tampoco esto es determinante) si intento acceder a la página, noto que
se demora demasiado, e incluso a veces se agota el tipo de espera y obtengo
el típico mensaje de error. En esos momentos he hecho la prueba de
conectarme via ftp al sitio donde está alojada la bd y veo que además de la
bd, hay un archivo tipo ldb, que es el tipo de archivo que access crea
cuando una bd está abierta. Esto no debería ocurrir, pues las consultas a la
base de datos son de sólo lectura, no actualizo, ni inserto, ni borro ningún
registro, sólo extraigo la información contenida en campos de tipo texto o
tipo memo, los cuales tienen los textos, títulos, artículos, etc, de la
página.
La técnica que empleo para construir las páginas consiste en, al principio
de cada página, abrir una conexión a la bd e ir llamando a una serie de
funciones que extraen la información de la bd, para ponerla formateada con
html en una serie de variables. Después cierro la conexión. En esquema,
podría ser algo así:
<html>
<head>
alguna cosa del html por aquí y por allá...
<%
Dim con, Titulo, Parrafo1, Parrafo2, Parrafo3
Set con = Server.CreateObject("ADODB.Connection")
' ... establezco la conexión
Titulo = FuncionExtraeTitulo(con)
Parrafo1 = FuncionExtraeParrafo1(con)
Parrafo2 = FuncionExtraeParrafo2(con)
Parrafo3 = FuncionExtraeParrafo3(con)
con.Close
Set con = Nothing
%>
... aquí algo de html
<title><% = titulo %><head>
<body>
... aquí algo de html
<% = Parrafo1 %>
... aquí algo de html
<% = Parrafo2 %>
... aquí algo de html
<% = Parrafo3 %>
</bdy>
<html>
En estas funciones "FuncionExtraeParrafo" básicamente se abre un recordset,
se extrae una información de unos campos, se le da formato html, dependiendo
de la tabla que estemos consultando y se devuelve el texto formateado, para
después ponerlo en la variable correspondiente (Parrafo1, Parrafo2, etc).
La única teoría que tengo de lo que puede estar pasando es que mientras se
esté ejecutando el proceso de formatear el texto con un recordset, se
produzca una segunda llamada a la bd. Esta segunda llamada, no se por qué,
podría ser la que provocara el que se abriera un archivo del tipo ldb
(archivo de bloqueos de Access) y entonces, tampoco sé cómo, una conexión a
la bd queda abierta. A partir de aquí, hay que esperar entre 5 -10 minutos
para que el acceso a la página (y a la bd, claro) se restablezca.
¿Alguien puede iluminarme un poco en lo que puedo estar haciendo mal o
aportarme alguna pista?
Muchas gracias por leerme hasta aquí y perdonad por el rollo.
Saludos,
Juan M. Afán de Ribera
[MVP Access]
http://www.accessvbafaq.mvp-access.com
http://www.mvp-access.com/juanmafan
Leer las respuestas