ASP, VBScript, and Access Databases

I want to search in a database and I want to visualize the result of the search from 10 to 10 records, I only obtain the next error:

"La operación solicitada por la aplicación no es admitida por el proveedor. " (if something like the provider don´t provide the operation required by the application.)

in the next code:



<%@ Language=VBScript %>

<%
'Defino variables

Dim iPageSize       'Tamaño de las páginas
Dim iPageCount      'Número de páginas que se volvieron atrás
Dim iPageCurrent      'Página corriente
'Dim strOrderBy      'A fake parameter used to illustrate passing them
Dim strSQL          'Sentencia SQL a ejecutar
Dim StringABuscar      'Aquí almaceno la cadena ingresada por el usuario
Dim objPagingConn   'Objeto conexión ADODB
Dim objPagingRS     'Objeto recodset ADODB
Dim iRecordsShown   'Controlador de loop para visualizar records según iPageSize
Dim I               'Variable standard para loops

'Inicializo variables
iPageSize = 10            'Voy a listar a lo sumo 10 registros por página
CONN_STRING = "DBQ=" & Server.MapPath("lisicki_busqueda.mdb") & ";"
CONN_STRING = CONN_STRING & "Driver={Microsoft Access Driver (*.mdb)};"


'Capturo la página a visualizar. Por default es la página 1
If Request.QueryString("page") = "" Then
      iPageCurrent = 1
Else
      'Paso a número entero la cadena que recibo
      iPageCurrent = CInt(Request.QueryString("page"))
End If

'Tomo el valor del campo que recibo del form de búsqueda completado por el usuario
StringABuscar = request("QueVoyABuscar")

'Construyo la sentencia SQL que voy a llamar para la consulta
'Por ahora levanto toda la tabla para probar.
'Faltaría agregar las condiciones con respecto a la cadena ingresada por el usuario
strSQL = "SELECT * FROM PAGINAS"

' Finalmente creo y abro la conexión con la base de datos
Set objPagingConn = Server.CreateObject("ADODB.Connection")
objPagingConn.Open "lisicki_busqueda"

'Creo el recordset
Set objPagingRS = Server.CreateObject("ADODB.Recordset")

'Seteo el tamaño de la página
objPagingRS.PageSize = iPageSize
objPagingRS.CacheSize = iPageSize

'Abro el recordset
objPagingRS.Open strSQL, objPagingConn,,,adCmdTable

'Obtengo el contador de páginas usando el tamaño de página dado
iPageCount = objPagingRS.PageCount

'Si la página requerida se va del rango aceptable
'se define la página corriente como el tope (1 ó máximo)
If iPageCurrent > iPageCount Then iPageCurrent = iPageCount
If iPageCurrent < 1 Then iPageCurrent = 1

'Chequeo si el resultado de la búsqueda es vacío
If iPageCount = 0 Then
      Response.Write "No se han encontrado registros en la base de datos"
Else
      'Me muevo a la página seleccionada
      objPagingRS.AbsolutePage = iPageCurrent


'Comienzo a visualizar la página x de n líneas
      %>

<FONT SIZE="2" face=Verdana>
      Página <B><%= iPageCurrent %></B> de <B><%= iPageCount %></B>
      </FONT>
      <%
      'Espaciado
      Response.Write "<BR><BR>" & vbCrLf

      'Continuo con una fila de etiquetas para la tabla
      Response.Write "<TABLE BORDER=""1"">" & vbCrLf

      'Muestro los nombres de los campos
      Response.Write vbTab & "<TR>" & vbCrLf
      For I = 0 To objPagingRS.Fields.Count - 1
          Response.Write vbTab & vbTab & "<TD><B>"
          Response.Write objPagingRS.Fields(I).Name
          Response.Write "<B></TD>" & vbCrLf
      Next 'I
      Response.Write vbTab & "</TR>" & vbCrLf

      'Loopeo a través de los records y visualizo un registro cada vez
      iRecordsShown = 0
      Do While iRecordsShown < iPageSize And Not objPagingRS.EOF
            Response.Write vbTab & "<TR>" & vbCrLf
            For I = 0 To objPagingRS.Fields.Count - 1
                Response.Write vbTab & vbTab & "<TD>"
                Response.Write objPagingRS.Fields(I)
                Response.Write "</TD>" & vbCrLf
            Next 'I
            Response.Write vbTab & "</TR>" & vbCrLf

            'Incremento el número de records que mostré y paso al siguiente registro
            iRecordsShown = iRecordsShown + 1
            objPagingRS.MoveNext
      Loop

      'Cierro la tabla
      Response.Write "</TABLE>" & vbCrLf
End If

'Cierro los objetos y libero variables
objPagingRS.Close
Set objPagingRS = Nothing
objPagingConn.Close
Set objPagingConn = Nothing

'Muestro los enlaces a las páginas "anterior" y "siguiente"
'y los parámetros necesarios para reconstruir la consulta

If iPageCurrent <> 1 Then
      %>
      <A HREF="busqueda.asp?page=<%= iPageCurrent - 1 %>>Anterior</A>
      &nbsp;&nbsp;
      <%
End If

If iPageCurrent < iPageCount Then
      %>
      <A HREF="busqueda.asp?page=<%= iPageCurrent + 1 %>>Siguiente</A>
      <%
End If

%>
monyciacciulliAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

JOKCommented:
Does it indicate what line is causing the problem?

It might be the PageSize or CacheSize.
Try commenting out one/both lines.

I had the same problem when I started using it, but I can't remember how I fixed it. I might have updated MDAC. I'll try to figure out what it was.
0
clockwatcherCommented:
I believe you'll need to use a client-side cursor if you want AbsolutePage to work.

Try adding the following before you open your recordset (adUseClient = 3) and see if it helps.

objPagingRS.cursorLocation = 3

----------------
'Seteo el tamaño de la página
objPagingRS.PageSize = iPageSize
objPagingRS.CacheSize = iPageSize
objPagingRS.cursorLocation = 3

'Abro el recordset
objPagingRS.Open strSQL, objPagingConn,,,adCmdTable





 
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
JOKCommented:
maybe that was it :O
0
mgfranzCommented:
Use the client cursor to enable AbsolutePosition property.

Check out this hack;

objPagingRS.CursorLocation = adUseClient
objPagingRS.Open "lisicki_busqueda", conn, , , adCmdTable  
   
objPagingRS.PageSize = 5  
intPageCount = objPagingRS.PageCount
   For intPage = 1 To intPageCount      objPagingRS.AbsolutePage = intPage
      strMessage = ""     
For intRecord = 1 To objPagingRS.PageSize
         strMessage = strMessage & _            objPagingRS!fname & " " & _
            objPagingRS!lname & " " & _
            objPagingRS!hire_date & vbCr         rstEmployees.MoveNext
         If objPagingRS.EOF Then
Exit For      
Next intRecord
MsgBox strMessage  
Next intPage  
objPagingRS.Close  

Nice catch CW.

Mark
0
monyciacciulliAuthor Commented:
Thank you
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
ASP

From novice to tech pro — start learning today.