#1 [ASP] Error con consulta de base
hola amigos
tengo un problema con la respuesta de una consulta de base access que les paso a comentar a ver sio me pueden dar una mano, dese ya gracias.
Contexto:
Todos los que estamos en foros siempre estamos aprendiendo gracias a los aportes de otros, bueno mi forma de aportar en dando un servicio con una web montada en un servidor casero sobre winXP, es la unica forma de poner mas de 4Gb online sin costos, por ahora viene funcionando bien, le puse un servidor de DNS gratis y esta online en
http://libros.freewww.info si les guntan los libros aca hay mas de 4000 titulos para bajar
estoy intentando armar un "Top 100" de los libros mas bajados, para lo cual coloque un cuenta clicks en los link de los libros que me carga en una base los datos del link y cantidad de veces bajado, esto funciona bien, la base tiene la estructura de
Nombre del campo - tipo de datos
ID - autonumerico
url - text
clicks - numerico
Cuando hago la consulta de la base, me responde con una tabla con los datos de los registros y la cantidad de clicks de cada link, logre darle un orden ascente y un top de 100 y luego que me genere el link para la descarga pero aca viene el lio.
Cuando me genera el link tomando los datos de la base, lo que pasa es que como los nombres de los archivos de los libros tienen espacio, me muestra el link hasta el primer espacio que encuentra y luego lo corta ahi, quedando inclompleto.
Todavia no le puse ningun link al publico pero para que vean el error esta aca
http://libros.freewww.info/cuenta/bdconsultar.asp
Abajo les dejo copiado el codigo del clicks.asp que es el que carga la base
y el dbconsultar.asp que hace la consulta y genera el link
Gracias a todos y saludos
clicks.asp
<%
Response.Buffer=TRUE
url = Request.Querystring("url")
if url <>"" then
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="&Server.MapPath("cuentaclicks.mdb")&";"
strsql = "SELECT * FROM tblContador WHERE url = '" & url & "'"
Set rs = Server.CreateObject("ADODB.RecordSet")
RS.open strsql, oConn, 3, 3
if rs.eof then
rs.AddNew
rs("clicks")= 1
rs("url") = url
rs.update
else
rs("clicks")=rs("clicks")+1
rs.update
end if
rs.Close
set rs=nothing
oConn.Close
response.redirect URL
end if
%>
dbconsultar.asp
<%
'================================================= ===================================
'Ejemplos de Base de Datos --- Carlos de la Orden Dijs --- www.aspfacil.com -- Mar/01
'================================================= ===================================
Dim oConn, rs, SQL
Dim nombre
'Creo el objeto Connection
set oConn = Server.CreateObject("ADODB.Connection")
'Para conectar a la base de datos, utiliza una de estas conexiones
'Solo tienes que quitar el comentario (') a la que quieras utilizar
'y comentar o borrar las otras líneas
'Access con OLEDB:
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("cuentaclicks.mdb")
'Access con ODBC:
'oConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("base.mdb")
'En mi caso, tengo la cadena de conexión en una variable de aplicación
'oConn.Open Application("CadenaConn")
'Para utilizar esta, tienes que tener un fichero GLOBAL.ASA con esta línea
' Application("CadenaConn") = ... la cadena de conexión que quieras
'En el Sub Application_OnStart
'Mi sentencia SQL que extrae todos los campos de la tabla 'Tabla'
SQL="SELECT TOP 100 * FROM Tabla WHERE clicks > 1 ORDER BY clicks DESC"
'Creo un Recordset (set rs) a partir de la ejecución de la consulta (oConn.Execute)
set rs = oConn.Execute(SQL)
'¿Esta vacío?
if rs.EOF then
Response.Write("No hay ningún registro en esta tabla")
else
'Llamo al procedimiento que pinta la tabla
PintarTabla
end if
'Cierro el Recordset
rs.Close
'Destruyo el objeto
set rs = nothing
'Cierro la conexión
oConn.Close
'Destruyo la conexión
set oConn = nothing
'===========================================
Sub PintarTabla ()
'Utiliza el objeto rs abierto
'para pintar la tabla
'La primera fila la escribo directamente, con
'los nombres de los campos
Response.Write( "<TABLE BORDER=""1"">" & vbCrlf)
Response.Write( "<TR>" & vbCrlf)
Response.Write( "<TD><B>Libros</B></TD>" & vbCrlf )
Response.Write( "<TD><B>Descargas</B></TD>" & vbCrlf )
Response.Write( "</TR>" & vbCrlf )
'Hasta que llegue al final del recordset...
while not rs.EOF
'Imprimo una fila de la tabla
'para cada registro que encuentre
Response.Write( "<TR>" & vbCrlf )
Response.Write( "<TD><a href="& rs.Fields("url") &">link</a>" & rs.Fields("url") & "</TD>" )
Response.Write( "<TD>" & rs.Fields("clicks") & "</TD>" )
Response.Write( "</TR>" & vbCrlf )
'MUY IMPORTANTE!!!!!
'Pasamos al siguiente registro
rs.MoveNext
'Olvidarte esto significa que vas a imprimir
'siempre el mismo registro... Un bucle infinito!
wend
'Cierro la tabla
Response.Write("</TABLE>")
End Sub 'PintarTabla
'===========================================
Sub Mantenimiento
'Para mantener la tabla en un tamaño manejable...
rs.Open SQL, oConn, 1, 2
'RecordCount me devuelve el nº de registros
iCuantos = rs.RecordCount
'Si tengo más de 12, voy borrando...
while iCuantos > 12
rs.MoveFirst
rs.Delete
rs.Update
iCuantos = iCuantos - 1
wend
'Ahora si, cierro el Recordset
rs.Close
End Sub
%>
tengo un problema con la respuesta de una consulta de base access que les paso a comentar a ver sio me pueden dar una mano, dese ya gracias.
Contexto:
Todos los que estamos en foros siempre estamos aprendiendo gracias a los aportes de otros, bueno mi forma de aportar en dando un servicio con una web montada en un servidor casero sobre winXP, es la unica forma de poner mas de 4Gb online sin costos, por ahora viene funcionando bien, le puse un servidor de DNS gratis y esta online en
http://libros.freewww.info si les guntan los libros aca hay mas de 4000 titulos para bajar
estoy intentando armar un "Top 100" de los libros mas bajados, para lo cual coloque un cuenta clicks en los link de los libros que me carga en una base los datos del link y cantidad de veces bajado, esto funciona bien, la base tiene la estructura de
Nombre del campo - tipo de datos
ID - autonumerico
url - text
clicks - numerico
Cuando hago la consulta de la base, me responde con una tabla con los datos de los registros y la cantidad de clicks de cada link, logre darle un orden ascente y un top de 100 y luego que me genere el link para la descarga pero aca viene el lio.
Cuando me genera el link tomando los datos de la base, lo que pasa es que como los nombres de los archivos de los libros tienen espacio, me muestra el link hasta el primer espacio que encuentra y luego lo corta ahi, quedando inclompleto.
Todavia no le puse ningun link al publico pero para que vean el error esta aca
http://libros.freewww.info/cuenta/bdconsultar.asp
Abajo les dejo copiado el codigo del clicks.asp que es el que carga la base
y el dbconsultar.asp que hace la consulta y genera el link
Gracias a todos y saludos
clicks.asp
<%
Response.Buffer=TRUE
url = Request.Querystring("url")
if url <>"" then
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="&Server.MapPath("cuentaclicks.mdb")&";"
strsql = "SELECT * FROM tblContador WHERE url = '" & url & "'"
Set rs = Server.CreateObject("ADODB.RecordSet")
RS.open strsql, oConn, 3, 3
if rs.eof then
rs.AddNew
rs("clicks")= 1
rs("url") = url
rs.update
else
rs("clicks")=rs("clicks")+1
rs.update
end if
rs.Close
set rs=nothing
oConn.Close
response.redirect URL
end if
%>
dbconsultar.asp
<%
'================================================= ===================================
'Ejemplos de Base de Datos --- Carlos de la Orden Dijs --- www.aspfacil.com -- Mar/01
'================================================= ===================================
Dim oConn, rs, SQL
Dim nombre
'Creo el objeto Connection
set oConn = Server.CreateObject("ADODB.Connection")
'Para conectar a la base de datos, utiliza una de estas conexiones
'Solo tienes que quitar el comentario (') a la que quieras utilizar
'y comentar o borrar las otras líneas
'Access con OLEDB:
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("cuentaclicks.mdb")
'Access con ODBC:
'oConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("base.mdb")
'En mi caso, tengo la cadena de conexión en una variable de aplicación
'oConn.Open Application("CadenaConn")
'Para utilizar esta, tienes que tener un fichero GLOBAL.ASA con esta línea
' Application("CadenaConn") = ... la cadena de conexión que quieras
'En el Sub Application_OnStart
'Mi sentencia SQL que extrae todos los campos de la tabla 'Tabla'
SQL="SELECT TOP 100 * FROM Tabla WHERE clicks > 1 ORDER BY clicks DESC"
'Creo un Recordset (set rs) a partir de la ejecución de la consulta (oConn.Execute)
set rs = oConn.Execute(SQL)
'¿Esta vacío?
if rs.EOF then
Response.Write("No hay ningún registro en esta tabla")
else
'Llamo al procedimiento que pinta la tabla
PintarTabla
end if
'Cierro el Recordset
rs.Close
'Destruyo el objeto
set rs = nothing
'Cierro la conexión
oConn.Close
'Destruyo la conexión
set oConn = nothing
'===========================================
Sub PintarTabla ()
'Utiliza el objeto rs abierto
'para pintar la tabla
'La primera fila la escribo directamente, con
'los nombres de los campos
Response.Write( "<TABLE BORDER=""1"">" & vbCrlf)
Response.Write( "<TR>" & vbCrlf)
Response.Write( "<TD><B>Libros</B></TD>" & vbCrlf )
Response.Write( "<TD><B>Descargas</B></TD>" & vbCrlf )
Response.Write( "</TR>" & vbCrlf )
'Hasta que llegue al final del recordset...
while not rs.EOF
'Imprimo una fila de la tabla
'para cada registro que encuentre
Response.Write( "<TR>" & vbCrlf )
Response.Write( "<TD><a href="& rs.Fields("url") &">link</a>" & rs.Fields("url") & "</TD>" )
Response.Write( "<TD>" & rs.Fields("clicks") & "</TD>" )
Response.Write( "</TR>" & vbCrlf )
'MUY IMPORTANTE!!!!!
'Pasamos al siguiente registro
rs.MoveNext
'Olvidarte esto significa que vas a imprimir
'siempre el mismo registro... Un bucle infinito!
wend
'Cierro la tabla
Response.Write("</TABLE>")
End Sub 'PintarTabla
'===========================================
Sub Mantenimiento
'Para mantener la tabla en un tamaño manejable...
rs.Open SQL, oConn, 1, 2
'RecordCount me devuelve el nº de registros
iCuantos = rs.RecordCount
'Si tengo más de 12, voy borrando...
while iCuantos > 12
rs.MoveFirst
rs.Delete
rs.Update
iCuantos = iCuantos - 1
wend
'Ahora si, cierro el Recordset
rs.Close
End Sub
%>
0