• User

    Impaginazione risultati di una query

    Ciao a tutti avrei bisogno del vostro aiuto perche da diverso tempo cerco di risolvere l'impaginazione di una lista venuta fuori da una query e non ci riesco. Ho provato ad applicare i vari codici trovati nei forum ma non riesco a concludere un bel niente. Gradirei tantissimo se qualcuno mi desse un cenno per capire da dove partire. Grazie

    Di seguito il codice che utilizzo per la query

    <%
    '---Recupero i prodotti dal database e li stampo a video
    SQLNavigazione = " SELECT * FROM Prodotti WHERE Offerta = true AND Giacenza=1 ORDER BY Prodotto ASC"
    Set RSNavigazione = Conn.Execute (SQLNavigazione)
    If Not RSNavigazione.Eof Then RSNavigazione.MoveFirst
    Do While Not RSNavigazione.EoF
    %>
    <div align="center">
    <table border="0" width="537" cellspacing="0" cellpadding="0">
    <tr>
    <td width="140">
    <a href="catalogo.asp">
    <p align="center">
    <img src="wbresize.aspx?f=../<%=RSNavigazione("PFoto")%>&c=100&w=90&q=1" border="0">
    </a>
    </td>
    <td width="397">
    <a href="catalogo.asp">
    <%=RSNavigazione("Prodotto")%>
    </a>
    </td>
    </tr>
    <tr>
    <td colspan="2">
    <hr size="1">
    </td>
    </tr>
    </table>
    </div>
    <br>
    <%
    RSNavigazione.MoveNext
    loop
    RSNavigazione.Close
    %>


  • Super User

    Qual'è il problema che hai con quel codice? Penso comunque che dovresti aggiungere una riga per ogni risultato che ottieni, e non una nuova tabella, qualcosa del tipo:

    <div>
    ...
    <table>
    <% per ogni riga del risultato %>
    <tr>....</tr>
    <%fine ciclo%>
    </table>
    ,...
    </div>


  • User

    Si grazie, quello è il primo errore da sistemare, una riga per ogni risultato e non una tabella.
    Quello che mi serve però è avere tipo 10 risultati per pagina ma non riesco ad applicare il codice, cioè non riesco prorpio a capire il suo funzionamento...
    tanto per iniziare metterlo nella stessa pagina? insomma se mi dai qualche indicazione poi ci penso io a fare le prove ma almeno uno spunto concreto.
    grazie mille


  • Super User

    Non riesci a capire il funzionamento del codice qui sopra? In tal caso credo che ti serva leggere una guida sull'ASP. Se cominci da zero prova qualche altro linguaggio più evoluto, tipo ASP.NET.
    In ogni caso il codice sopra esegue una query e poi per ogni riga del risultato scrive quello che vedi tra Do While ... e RSNavigazione.MoveNext. I valori pescati dal database vengono scritti con righe di questo tipo:

    <%=RSNavigazione("Prodotto")%>

    Se vuoi fare la paginazione (i 10 risultati per pagina che dicevi sopra), ci vogliono un pò di controlli aggiuntivi. Come dicevo prima, se stai cominciando ora, usa ASP.NET, questo e molte altre cose te le trovi già fatte con pochi click.


  • User

    scusa mi sono espresso male, non riusco a capire il codice che ho trovato da piu forum per fare la paginazione dei risultati della query in diverse pagine...
    hai qualche cosa di semplice che funzioni bene?
    grazie


  • Super User

    Mi spiace ma di già fatto non ho niente, ASP lo conosco ma non lo uso, come detto ASP.NET è molto più semplice. In ogni caso posta qualcosa e vediamo se si riesce a capire il codice.


  • User

    questo codice ad esempio può fare al caso mio? ho provato piu volte a modificarlo per adattarlo al mio codice di cui sopra ma non ci sono riuscito.

    <%
    'recupero la pagina
    page = Request.QueryString("page")
    ' imposto il numero di record per pagina
    perpage = 10

    'connessione al db
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("percorso/database.mdb")
    Set Rs = Server.CreateObject("ADODB.Recordset")
    sql = "SELECT * FROM messaggi ORDER BY id"
    Rs.Open sql, Conn, 1, 3

    'imposto la variabile in modo da ottenere l'ultima se non ne viene specificata un'altra
    If page = "" then
    page = (rs.PageCount)
    End if

    'imposto la dimensione della pagina
    Rs.PageSize = perpage
    ' mi sposto all'ultima pagina
    Rs.AbsolutePage = page

    'scrivo i link ai 10 record
    For i = 1 to perpage
    If Not Rs.EOF then
    if Rs("id") < 10 then
    Response.Write ("[<a href='tuapagina.asp?id=" & Rs("id") & "'>0" & Rs("id") & "</a>] ")
    else
    Response.Write ("[<a href='tuapagina.asp?id=" & Rs("id") & "'>" & Rs("id") & "</a>] ")
    end if
    Rs.MoveNext
    end if
    next

    'scrivo i numeri delle pagine
    Response.Write "<P><B>Pagine:</B> "

    For pag= 1 to rs.PageCount
    if page = pag then
    'grassetto per la pagina corrente
    Response.Write "<b>"
    Response.Write "<A href='questapagina.asp?page=" & pag
    Response.write "'>"
    Response.Write pag
    Response.Write "</A> "
    Response.Write "</b>"
    else
    'normale per le altre pagine
    Response.Write "<A href='questapagina.asp?page=" & pag
    Response.write "'>"
    Response.Write pag
    Response.Write "</A> "
    end if
    Next

    Response.Write "</P>"

    'chiudo la connessione
    Rs.Close
    Set Rs = Nothing
    Conn.Close
    Set Conn = Nothing
    %>


  • Super User

    Si questo potrebbe andare, ma ripeto, se non riesci a capire il significato del codice prima è meglio che leggi qualche guida sul linguaggio ASP, almeno per avere i concetti di base.


  • User

    il significato del codice un po lo capisco, se avessi avuto tempo avrei studiato ma mi sono rivolto al forum proprio perche mi serviva un aiuto pratico e veloce.
    grazie lo stesso, sei stato gentilissimo
    ciao


  • User

    Tanto per cominciare queste sono le cose che non capisco:

    <%
    'recupero la pagina (QUALE PAGINA? QUESTO CODICE NON VA MESSO NELLA STESSA PAGINA DELLA QUERY?)
    page = Request.QueryString("page")
    ' imposto il numero di record per pagina
    perpage = 10

    'connessione al db (PERCHE LA CONNESISONE AL DB? L?HO Già FATTA CON LA MIA QUERY)
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("percorso/database.mdb")
    Set Rs = Server.CreateObject("ADODB.Recordset")
    sql = "SELECT * FROM messaggi ORDER BY id"
    Rs.Open sql, Conn, 1, 3

    'imposto la variabile in modo da ottenere l'ultima se non ne viene specificata un'altra
    If page = "" then
    page = (rs.PageCount)
    End if

    'imposto la dimensione della pagina
    Rs.PageSize = perpage (DI QUALE DIMENSIONE PARLA)
    ' mi sposto all'ultima pagina
    Rs.AbsolutePage = page

    Grazie in anticipo a chi vorrà aiutarmi.


  • Super User

    Il codice che hai postato tu serve per la paginazione.

    Quando dice recupero la pagina intende il numero della pagina, cioè se io faccio

    result.asp?page=3

    vuol dire che volgio la terza pagina dei risultati.

    Connessione e query sono due cose diverse, la connessione ti permette di accedere al database e fare le query.

    Infine quando parla di dimensione intende il numero di risultati da visualizzare in ogni pagina, rappresentato dalla variabile perpage.

    @partisan75 said:

    Tanto per cominciare queste sono le cose che non capisco:

    <%
    'recupero la pagina (QUALE PAGINA? QUESTO CODICE NON VA MESSO NELLA STESSA PAGINA DELLA QUERY?)
    page = Request.QueryString("page")
    ' imposto il numero di record per pagina
    perpage = 10

    'connessione al db (PERCHE LA CONNESISONE AL DB? L?HO Già FATTA CON LA MIA QUERY)
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("percorso/database.mdb")
    Set Rs = Server.CreateObject("ADODB.Recordset")
    sql = "SELECT * FROM messaggi ORDER BY id"
    Rs.Open sql, Conn, 1, 3

    'imposto la variabile in modo da ottenere l'ultima se non ne viene specificata un'altra
    If page = "" then
    page = (rs.PageCount)
    End if

    'imposto la dimensione della pagina
    Rs.PageSize = perpage (DI QUALE DIMENSIONE PARLA)
    ' mi sposto all'ultima pagina
    Rs.AbsolutePage = page

    Grazie in anticipo a chi vorrà aiutarmi.