Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Errore 800a0bb9 su bookmark

    Ciao a tutti
    Mi trovo a dover metter mano su uno script di paginazione in ASP, in modo che non visualizzi semplicemente N record per pagina, ma ne mostri al massimo N secondo determinati criteri.

    Per fare questo, io ho lasciato rs.PageSize=N, ma il ciclo for per scorrere i record da visualizzare nella singola pagina l'ho fatto invece che da i=1 to N, così: for i=1 to righe, dove righe è una variabile che corrisponde ad un valore compreso tra 1 e N e che cambio dinamicamente in ogni pagina.
    Alla fine del ciclo for, io ho settato una variabile chiamata segnalibro=rs.Bookmark, dopodichè ho passato tramite querystring il valore di segnalibro alla pagina successiva.

    Il mio intento era di riportare il recordset, all'inizio di pagina 2, al valore che invece ha raggiunto alla fine di pagina 1 (visto che pagina 1 poteva non aver stampato tutti e N i valori impostati nel PageSize), e per fare questo vado a rilevare il valore di segnalibro dalla querystring, ed imposto: rs.Bookmark=segnalibro.

    A questo punto, però, su quella riga ricevo il famigerato errore:

    ADODB.Recordset error '800a0bb9'

    Gli argomenti non sono di tipo valido, non sono compresi nell'intervallo consentito o sono in conflitto.

    Ho fatto la prova, solo per vedere se non dava errore (poi ovviamente l'ho tolto), ad assegnare rs.Bookmark=segnalibro subito dopo segnalibro=rs.Bookmark (quindi alla fine del ciclo e virtualmente ancora "a pagina 1") e non ha dato alcun errore.

    Non riesco a capire, quindi, se è proprio sbagliato il concetto di base, cioè una volta passati alla pagina successiva qualcosa impedisce al recordset di posizionarsi e quindi mostrarmi dei record che apparterrebbero alla pagina precedente, oppure se il problema è nel passare il valore di segnalibro tramite querystring.... qualcuno sa aiutarmi, visto che non ho mai affrontato un problema del genere? Grazie!
    Allie Graywords

  2. #2
    codice:
    pagina = request.queryString("pagina")
    if len(pagina) > 0 and isNumeric(pagina) then
      pagina = cLng(pagina)
    else
      pagina = 1
    end if
    
    pagina = int(pagina)
    if pagina < 0 then pagina = 1
    
    recordPerPagina = 10
    
    questaPagina = request.serverVariables("PATH_INFO")
    
    set conn = server.createObject("ADODB.Connection")
    conn.open connectionString
    
    sql = "SELECT * FROM tabella1"
    
    set rs = server.createObject("ADODB.Recordset")
    rs.open sql, 1, 3
    
    if not rs.eof then
    
        rs.pageSize = recordPerPagina ' ovvero quanti record mostrare in ogni pagina
        rs.absolutePage = pagina ' ovvero il numero pagina passato via queryString su cui posizionarsi all'interno del recordset
          for r = 1 to recordPerPagina
            if not rs.eof then
              ' leggo i dati dalla tabella del db
              response.write rs("campo1") & " " & rs("campo2") & "
    "
            else
              exit for ' esco dal ciclo for perchè non ci sono più record
            end if
          next
    
      ' blocco paginazione
      response.write "Pagine: "
      for p = 1 to rs.pageCount
        if p = pagina then
          response.write p & " "
        else
          response.write "" & p & " "
        end if
      next
    else
      response.write "Non ci sono dati da visualizzare"
    end if
    
    rs.close
    set rs = nothing
    
    conn.close
    set conn = nothing

  3. #3
    Grazie Mems, ma questa è una paginazione normale, mentre io ho una necessità diversa, come ho spiegato nel mio post: si tratta infatti del sito di una ceramica nel quale non posso semplicemente dire "fammi vedere 10 record per pagina", perchè i prodotti devono essere raggruppati e ad esempio non possono esserci 4 piastrelle rosa in una pagina e 2 nell'altra, di conseguenza si deve fare in modo che vengano visualizzati nella stessa. Per far questo, io ho stabilito che 10 è il numero massimo dei record per pagina, e se arrivati a 10 "avanzano" dei record appartenenti a un gruppo che non dovrebbe essere separato, tutto il gruppo viene spostato alla pagina successiva.
    Per questo tramite bookmark volevo salvarmi il record che dovrebbe diventare il primo della pagina successiva e passarglielo tramite querystring, solo che al momento di spostare il recordset sul valore recuperato dalla querystring mi dà errore
    Purtroppo il database è un access, quindi devo fare dei casini assurdi che magari tramite LIMIT avrei potuto evitarmi
    Allie Graywords

  4. #4
    Beh, quello è un problema di query sql.

  5. #5
    E come faccio via query sql a risolvere un problema del genere ed allo stesso tempo tenere una paginazione? Specie con ASP/Access dove devo usare per forza la paginazione intrinseca del recordset e non posso costruirmela tramite LIMIT...

    Io ho bisogno di dirgli:

    se sei a pagina 1 allora fermati a 9 record, se sei a pagina 2 parti dal record successivo a quello dove ti eri fermato a pagina 1 e fermati a 6 record, se sei a pagina 3 parti dal record successivo a quello dove ti eri fermato a pagina 2 e mostrali tutti e 10, e così via...

    pensavo di risolvere facendo il ciclo FOR solo sul numero di record che devo vedere per ogni specifica pagina, e mantenere il PageSize fisso a 10, poi usare il bookmark per posizionare correttamente il recordset, ma quando provo a passargli il valore recuperato via querystring mi dà quell'errore... e io non ho ancora capito se sia un problema di qualcosa che non si può fare o altro
    Allie Graywords

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.