problemas con acceso a datos

26/04/2005 - 12:57 por luis qTp | Informe spam
Hola

tengo una página ASP que debe extraer datos, mediante una función, de una BD
access y me da algunos problemas bastante serios:

si arranco el ordenador y pruebo la web va estupendamente, pero en el
momento que abro el archivo MDB y lo modifico, aunque luego lo cierre deja
de funcionar todo el web. debo reiniciar el S.O. para que vuelva a funcionar

es un poco engorroso pues cada vez que quiero modificar la BD debo copiarla
fuera del inetpub, modificarla y sobreescribir la original con la copia.

¿alguien sabe que puede ocurrir? ¿qué hago mal?

La estructura es la siguiente:

pagina.asp

contiene unos includes a funciones y procedimientos que se van a usar desde
varios ASP

<!-- #INCLUDE file="inc/iobd.asp" -->
<!-- #INCLUDE file="inc/negocio.asp" -->

<%

dim conexion
conectar conexion (es un procedimiento incluido en iobd.asp para facilitar
las conexiones/desconexiones de la BD)

además, contiene una llamada a una función saca_texto(1) que recoge el
parámetro 1 y devuelve una cadena de texto

desconectar conexion

Los procedimientos conectar/desconectar son los siguientes y estan en
iobd.asp:

sub conectar(byref conexion)
'on error resume next
'abrimos la base de datos
Set conexion = Server.CreateObject("ADODB.Connection")
if Request.ServerVariables("SERVER_NAME") = "jupiter" then
'conexion no dsn
conexion.Open "DRIVER={Microsoft Access Driver (*.mdb)};
DBQ=c:\Inetpub\wwwroot\web\db\web.mdb"
else
conexion.Open "DRIVER={Microsoft Access Driver (*.mdb)};
DBQ=c:\Inetpub\wwwroot\web\db\web.mdb"
end if
If (Err.Number <> 0) Then
procesar_error "conectar(byref conexion) en iobd.asp.", Err
End If
end sub

sub desconectar(byref conexion)
'on error resume next
'cerramos la conexion
conexion.Close
set conexion = Nothing
If (Err.Number <> 0) Then
procesar_error "desconectar(byref conexion) en iobd.asp.", Err
End If
end sub

la funcion saca_texto que se encuentra en negocio.asp es la siguiente:

Function saca_texto(pagina)
Dim cadena
'on error resume next
dim registro, consulta, num_resultados

consulta = "SELECT * FROM textos WHERE (pagina=" & CInt(pagina) & ") ORDER
BY parrafo"
Set registro = Server.CreateObject ("ADODB.RecordSet")
registro.Open consulta, conexion, 1' adOpenStatic
If (Err.Number <> 0) Then
procesar_error "saca_texto(pagina) en negocio.asp.", Err
End If
num_resultados = registro.RecordCount
if num_resultados > 0 then
while not registro.eof
titulo = registro("titulo")
texto = registro("texto")
if titulo <> "" then
cadena = cadena & "<p class=textoG>" & titulo
end if
cadena = cadena & "<p class=textoM>" & texto
registro.Movenext
wend
end if
registro.Close
Set registro = nothing
saca_texto = cadena
End Function

Preguntas similare

Leer las respuestas

#1 Matias Iacono
26/04/2005 - 17:46 | Informe spam
Generalmente ese problema se debe al tipo de bloqueo que se hace sobre el
archivo.

En las propiedades de la base de datos puedes cambiar este bloqueo.

Por otro lado, siempre es conveniente que la DB en el caso de Access este
fuera del wwwroot.

Saludos,

Matías Iacono
Microsoft MVP ASP/ASP.net - DCE3

Profile: http://aspnet2.com/mvp.ashx?MatiasIacono
"luis qTp" escribió en el mensaje
news:d8pbe.150482$
Hola

tengo una página ASP que debe extraer datos, mediante una función, de una


BD
access y me da algunos problemas bastante serios:

si arranco el ordenador y pruebo la web va estupendamente, pero en el
momento que abro el archivo MDB y lo modifico, aunque luego lo cierre deja
de funcionar todo el web. debo reiniciar el S.O. para que vuelva a


funcionar

es un poco engorroso pues cada vez que quiero modificar la BD debo


copiarla
fuera del inetpub, modificarla y sobreescribir la original con la copia.

¿alguien sabe que puede ocurrir? ¿qué hago mal?

La estructura es la siguiente:

pagina.asp

contiene unos includes a funciones y procedimientos que se van a usar


desde
varios ASP

<!-- #INCLUDE file="inc/iobd.asp" -->
<!-- #INCLUDE file="inc/negocio.asp" -->

<%

dim conexion
conectar conexion (es un procedimiento incluido en iobd.asp para facilitar
las conexiones/desconexiones de la BD)

además, contiene una llamada a una función saca_texto(1) que recoge el
parámetro 1 y devuelve una cadena de texto

desconectar conexion

Los procedimientos conectar/desconectar son los siguientes y estan en
iobd.asp:

sub conectar(byref conexion)
'on error resume next
'abrimos la base de datos
Set conexion = Server.CreateObject("ADODB.Connection")
if Request.ServerVariables("SERVER_NAME") = "jupiter" then
'conexion no dsn
conexion.Open "DRIVER={Microsoft Access Driver (*.mdb)};
DBQ=c:\Inetpub\wwwroot\web\db\web.mdb"
else
conexion.Open "DRIVER={Microsoft Access Driver (*.mdb)};
DBQ=c:\Inetpub\wwwroot\web\db\web.mdb"
end if
If (Err.Number <> 0) Then
procesar_error "conectar(byref conexion) en iobd.asp.", Err
End If
end sub

sub desconectar(byref conexion)
'on error resume next
'cerramos la conexion
conexion.Close
set conexion = Nothing
If (Err.Number <> 0) Then
procesar_error "desconectar(byref conexion) en iobd.asp.", Err
End If
end sub

la funcion saca_texto que se encuentra en negocio.asp es la siguiente:

Function saca_texto(pagina)
Dim cadena
'on error resume next
dim registro, consulta, num_resultados

consulta = "SELECT * FROM textos WHERE (pagina=" & CInt(pagina) & ")


ORDER
BY parrafo"
Set registro = Server.CreateObject ("ADODB.RecordSet")
registro.Open consulta, conexion, 1' adOpenStatic
If (Err.Number <> 0) Then
procesar_error "saca_texto(pagina) en negocio.asp.", Err
End If
num_resultados = registro.RecordCount
if num_resultados > 0 then
while not registro.eof
titulo = registro("titulo")
texto = registro("texto")
if titulo <> "" then
cadena = cadena & "<p class=textoG>" & titulo
end if
cadena = cadena & "<p class=textoM>" & texto
registro.Movenext
wend
end if
registro.Close
Set registro = nothing
saca_texto = cadena
End Function



Respuesta Responder a este mensaje
#2 luis qTp
26/04/2005 - 19:34 | Informe spam
Muchísimas gracias, pero una respuesta casi siempre lleva a otra pregunta
O:-)

"Matias Iacono" escribió en el mensaje
news:
Generalmente ese problema se debe al tipo de bloqueo que se hace sobre el
archivo.

En las propiedades de la base de datos puedes cambiar este bloqueo.



¿cómo? ¿desde Access?


Por otro lado, siempre es conveniente que la DB en el caso de Access este
fuera del wwwroot.



¿es posible esto sin DSN? ¿y cuando la suba a su servidor adonde apuntará la
ruta?


Saludos,



muchas gracias de nuevo!!


Matías Iacono
Microsoft MVP ASP/ASP.net - DCE3

Profile: http://aspnet2.com/mvp.ashx?MatiasIacono
"luis qTp" escribió en el mensaje
news:d8pbe.150482$
> Hola
>
> tengo una página ASP que debe extraer datos, mediante una función, de


una
BD
> access y me da algunos problemas bastante serios:
>
> si arranco el ordenador y pruebo la web va estupendamente, pero en el
> momento que abro el archivo MDB y lo modifico, aunque luego lo cierre


deja
> de funcionar todo el web. debo reiniciar el S.O. para que vuelva a
funcionar
>
> es un poco engorroso pues cada vez que quiero modificar la BD debo
copiarla
> fuera del inetpub, modificarla y sobreescribir la original con la copia.
>
> ¿alguien sabe que puede ocurrir? ¿qué hago mal?
>
> La estructura es la siguiente:
>
> pagina.asp
>
> contiene unos includes a funciones y procedimientos que se van a usar
desde
> varios ASP
>
> <!-- #INCLUDE file="inc/iobd.asp" -->
> <!-- #INCLUDE file="inc/negocio.asp" -->
>
> <%
>
> dim conexion
> conectar conexion (es un procedimiento incluido en iobd.asp para


facilitar
> las conexiones/desconexiones de la BD)
>
> además, contiene una llamada a una función saca_texto(1) que recoge el
> parámetro 1 y devuelve una cadena de texto
>
> desconectar conexion
>
> Los procedimientos conectar/desconectar son los siguientes y estan en
> iobd.asp:
>
> sub conectar(byref conexion)
> 'on error resume next
> 'abrimos la base de datos
> Set conexion = Server.CreateObject("ADODB.Connection")
> if Request.ServerVariables("SERVER_NAME") = "jupiter" then
> 'conexion no dsn
> conexion.Open "DRIVER={Microsoft Access Driver (*.mdb)};
> DBQ=c:\Inetpub\wwwroot\web\db\web.mdb"
> else
> conexion.Open "DRIVER={Microsoft Access Driver (*.mdb)};
> DBQ=c:\Inetpub\wwwroot\web\db\web.mdb"
> end if
> If (Err.Number <> 0) Then
> procesar_error "conectar(byref conexion) en iobd.asp.", Err
> End If
> end sub
>
> sub desconectar(byref conexion)
> 'on error resume next
> 'cerramos la conexion
> conexion.Close
> set conexion = Nothing
> If (Err.Number <> 0) Then
> procesar_error "desconectar(byref conexion) en iobd.asp.", Err
> End If
> end sub
>
> la funcion saca_texto que se encuentra en negocio.asp es la siguiente:
>
> Function saca_texto(pagina)
> Dim cadena
> 'on error resume next
> dim registro, consulta, num_resultados
>
> consulta = "SELECT * FROM textos WHERE (pagina=" & CInt(pagina) & ")
ORDER
> BY parrafo"
> Set registro = Server.CreateObject ("ADODB.RecordSet")
> registro.Open consulta, conexion, 1' adOpenStatic
> If (Err.Number <> 0) Then
> procesar_error "saca_texto(pagina) en negocio.asp.", Err
> End If
> num_resultados = registro.RecordCount
> if num_resultados > 0 then
> while not registro.eof
> titulo = registro("titulo")
> texto = registro("texto")
> if titulo <> "" then
> cadena = cadena & "<p class=textoG>" & titulo
> end if
> cadena = cadena & "<p class=textoM>" & texto
> registro.Movenext
> wend
> end if
> registro.Close
> Set registro = nothing
> saca_texto = cadena
> End Function
>
>
>


Respuesta Responder a este mensaje
#3 Matias Iacono
26/04/2005 - 23:05 | Informe spam
¿cómo? ¿desde Access?



Abres la base de datos de access y en las opciones Base de Datos, en el
menu, tienes la propiedad de bloqueos.

Para esto: Herramientas > Opciones > Avanzadas

Ahí encuentras las opciones de bloqueo.

¿es posible esto sin DSN? ¿y cuando la suba a su servidor adonde apuntará


la
ruta?



Si, es posible, ten en cuenta que para acceder a una base de datos de access
es necesario tener acceso físico a ella, o sea, no importa si esta en el C:
o dentro de tu WWWROOT, lo importante es que el path que utilices haga
referencia a el.

Con respecto al servidor, depende mucho del servidor, si es uno de pago, por
lo general te entregan una carpeta que se llama DB la cual, justamente, esta
fuera del alcance de la web, en definitiva, desde tu navegador web no puedes
acceder a este directorio. Pero si a nivel de disco duro :D

Saludos,

Matías Iacono
Microsoft MVP ASP/ASP.net - DCE3

Profile: http://aspnet2.com/mvp.ashx?MatiasIacono
"luis qTp" escribió en el mensaje
news:XYube.158916$
Muchísimas gracias, pero una respuesta casi siempre lleva a otra pregunta
O:-)

"Matias Iacono" escribió en el mensaje
news:
> Generalmente ese problema se debe al tipo de bloqueo que se hace sobre


el
> archivo.
>
> En las propiedades de la base de datos puedes cambiar este bloqueo.

¿cómo? ¿desde Access?

>
> Por otro lado, siempre es conveniente que la DB en el caso de Access


este
> fuera del wwwroot.

¿es posible esto sin DSN? ¿y cuando la suba a su servidor adonde apuntará


la
ruta?

>
> Saludos,

muchas gracias de nuevo!!

>
> Matías Iacono
> Microsoft MVP ASP/ASP.net - DCE3
>
> Profile: http://aspnet2.com/mvp.ashx?MatiasIacono
> "luis qTp" escribió en el mensaje
> news:d8pbe.150482$
> > Hola
> >
> > tengo una página ASP que debe extraer datos, mediante una función, de
una
> BD
> > access y me da algunos problemas bastante serios:
> >
> > si arranco el ordenador y pruebo la web va estupendamente, pero en el
> > momento que abro el archivo MDB y lo modifico, aunque luego lo cierre
deja
> > de funcionar todo el web. debo reiniciar el S.O. para que vuelva a
> funcionar
> >
> > es un poco engorroso pues cada vez que quiero modificar la BD debo
> copiarla
> > fuera del inetpub, modificarla y sobreescribir la original con la


copia.
> >
> > ¿alguien sabe que puede ocurrir? ¿qué hago mal?
> >
> > La estructura es la siguiente:
> >
> > pagina.asp
> >
> > contiene unos includes a funciones y procedimientos que se van a usar
> desde
> > varios ASP
> >
> > <!-- #INCLUDE file="inc/iobd.asp" -->
> > <!-- #INCLUDE file="inc/negocio.asp" -->
> >
> > <%
> >
> > dim conexion
> > conectar conexion (es un procedimiento incluido en iobd.asp para
facilitar
> > las conexiones/desconexiones de la BD)
> >
> > además, contiene una llamada a una función saca_texto(1) que recoge el
> > parámetro 1 y devuelve una cadena de texto
> >
> > desconectar conexion
> >
> > Los procedimientos conectar/desconectar son los siguientes y estan en
> > iobd.asp:
> >
> > sub conectar(byref conexion)
> > 'on error resume next
> > 'abrimos la base de datos
> > Set conexion = Server.CreateObject("ADODB.Connection")
> > if Request.ServerVariables("SERVER_NAME") = "jupiter" then
> > 'conexion no dsn
> > conexion.Open "DRIVER={Microsoft Access Driver (*.mdb)};
> > DBQ=c:\Inetpub\wwwroot\web\db\web.mdb"
> > else
> > conexion.Open "DRIVER={Microsoft Access Driver (*.mdb)};
> > DBQ=c:\Inetpub\wwwroot\web\db\web.mdb"
> > end if
> > If (Err.Number <> 0) Then
> > procesar_error "conectar(byref conexion) en iobd.asp.", Err
> > End If
> > end sub
> >
> > sub desconectar(byref conexion)
> > 'on error resume next
> > 'cerramos la conexion
> > conexion.Close
> > set conexion = Nothing
> > If (Err.Number <> 0) Then
> > procesar_error "desconectar(byref conexion) en iobd.asp.", Err
> > End If
> > end sub
> >
> > la funcion saca_texto que se encuentra en negocio.asp es la siguiente:
> >
> > Function saca_texto(pagina)
> > Dim cadena
> > 'on error resume next
> > dim registro, consulta, num_resultados
> >
> > consulta = "SELECT * FROM textos WHERE (pagina=" & CInt(pagina) & ")
> ORDER
> > BY parrafo"
> > Set registro = Server.CreateObject ("ADODB.RecordSet")
> > registro.Open consulta, conexion, 1' adOpenStatic
> > If (Err.Number <> 0) Then
> > procesar_error "saca_texto(pagina) en negocio.asp.", Err
> > End If
> > num_resultados = registro.RecordCount
> > if num_resultados > 0 then
> > while not registro.eof
> > titulo = registro("titulo")
> > texto = registro("texto")
> > if titulo <> "" then
> > cadena = cadena & "<p class=textoG>" & titulo
> > end if
> > cadena = cadena & "<p class=textoM>" & texto
> > registro.Movenext
> > wend
> > end if
> > registro.Close
> > Set registro = nothing
> > saca_texto = cadena
> > End Function
> >
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida