• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 461
  • Last Modified:

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

%>
0
monyciacciulli
Asked:
monyciacciulli
1 Solution
 
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
 
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

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now