Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    336

    dubbio impaginazione tabelle

    Salve avrei una domanda da porvi. Ho il seguente codice per la paginazione di un recordset:

    --------------------------------------------------------------------------

    <% Dim DBConn
    Set DBConn=Server.CreateObject("ADODB.Connection")
    DBConn.Open "Negozio"
    Dim objRS
    Set objRS = Server.CreateObject("ADODB.Recordset")
    RecordsPerPagina = 5
    page = Request("page")
    if page="" then page=1 :master:
    strSQL = "SELECT * FROM Prodotti"
    objRS.open strSQL, DBConn, 1
    objRS.PageSize = RecordsPerPagina
    objRS.AbsolutePage = page
    If objRS.Eof=True or objRS.Bof=True then
    Response.Write "

    Nessun risultato trovato</P>"
    Else
    Response.Write ("<center><table border=1><tr>
    <th>Nome Prodotto</th><th>Tipo Prodotto</th>
    <th>Colore</th></tr>")
    For i=1 to RecordsPerPagina
    if Not objRS.EOF then
    Response.Write("<tr><td>“ & objRS("NomeProdotto") & "</td>")
    Response.Write("<td>" & objRS("TipoProdotto") & "</td>")
    Response.Write("<td>" & objRS("Colore") & "</td></tr>")
    objRS.MoveNext
    end if
    Next
    Response.Write ("</table></center>")
    End if
    Response.Write "

    Pagine: "
    For pag=1 to objRS.PageCount
    Response.Write "<A href='Paginazione.asp?page=" & pag & "'>"
    Response.Write pag
    Response.Write "</A> "
    Next
    Response.Write "</P>"
    objRS.Close
    Set objRS=Nothing
    DBConn.Close
    Set DBConn=Nothing
    %>


    ------------------------------------------------------------------------

    Premetto che il codice l'ho trovato su internet. La domanda è la seguente: da come è impostato il codice mi sembra che ogni volta che viene cambiata pagina il programma rieffettua la connessione al database e il caricamento dei dati nel recordset. La qualcosa mi sembra una perdita di tempo. Basterebbe, infatti, caricare una sola volta i dati e poi effettuare l'impaginazione con Absolute.
    Il mio dubbio riguarda le seguenti righe di codice:
    if page="" then page=1 :master:
    strSQL = "SELECT * FROM Prodotti"
    objRS.open strSQL, DBConn, 1
    La select e la connessione al database potrebbe essere risparmiata nel caso di page<>1
    Voi che dite?

    Spero di essere stato chiaro?
    Se volete potete intervenire, modificando il codice.

  2. #2
    Che bello quando ci sono domande da "porci"

    La domanda te la faccio io però:

    Cos'e' l'impaginazione con Absolute

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    336
    Così come vedi nel codice:
    objRS.PageSize = RecordsPerPagina
    objRS.AbsolutePage = page
    AbsolutePage serve a posizionare il recordset in modo che la pagina attiva sia quella specificata (in questo caso page)

  4. #4
    Utente di HTML.it L'avatar di yro
    Registrato dal
    Sep 2003
    Messaggi
    2,916
    non ho capito se devi paginare dei record o impaginare delle tabelle...
    E se avessi il dono della profezia e conoscessi tutti i misteri e tutta la scienza, e possedessi la pienezza della fede così da trasportare le montagne, ma non avessi la carità, non sono nulla.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    336
    Come vedi nel codice io ho una tabella da visualizzare . Questa tabella ha molti record, così io decido di fare in modo che ogni pagina me ne visualizzi 5 e non di più.

  6. #6
    Utente di HTML.it L'avatar di yro
    Registrato dal
    Sep 2003
    Messaggi
    2,916
    per la paginazione, se il codice che hai non ti ispira prova la classe aspbox di imente

    http://www.imente.org/index.php/deve...asses/aspdbox/

    magari è più funzionale per le tue esigenze.

    ps: io non ho avuto occasione di provarla, ma conoscendo i lavori fatti fin'ora sarà sicuramente ben fatta!
    E se avessi il dono della profezia e conoscessi tutti i misteri e tutta la scienza, e possedessi la pienezza della fede così da trasportare le montagne, ma non avessi la carità, non sono nulla.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    336
    La domanda che ponevo all'inizio riguarda il fatto che secondo me non occorre ricaricare i dati nel RecordSet ogni volta che si cambia pagina. Io modificherei così il codice ponendo un opportuno end if:

    <% Dim DBConn
    Set DBConn=Server.CreateObject("ADODB.Connection")
    DBConn.Open "Negozio"
    Dim objRS
    Set objRS = Server.CreateObject("ADODB.Recordset")
    RecordsPerPagina = 5
    page = Request("page")
    if page="" then page=1 // così se la page="" carica il recordset
    strSQL = "SELECT * FROM Prodotti" // altrimenti esegue l'AbsolutePage
    objRS.open strSQL, DBConn, 1
    objRS.PageSize = RecordsPerPagina
    end if
    objRS.AbsolutePage = page
    If objRS.Eof=True or objRS.Bof=True then
    Response.Write "

    Nessun risultato trovato</P>"
    Else
    Response.Write ("<center><table border=1><tr>
    <th>Nome Prodotto</th><th>Tipo Prodotto</th>
    <th>Colore</th></tr>")
    For i=1 to RecordsPerPagina
    if Not objRS.EOF then
    Response.Write("<tr><td>“ & objRS("NomeProdotto") & "</td>")
    Response.Write("<td>" & objRS("TipoProdotto") & "</td>")
    Response.Write("<td>" & objRS("Colore") & "</td></tr>")
    objRS.MoveNext
    end if
    Next
    Response.Write ("</table></center>")
    End if
    Response.Write "

    Pagine: "
    For pag=1 to objRS.PageCount
    Response.Write "<A href='Paginazione.asp?page=" & pag & "'>"
    Response.Write pag
    Response.Write "</A> "
    Next
    Response.Write "</P>"
    objRS.Close
    Set objRS=Nothing
    DBConn.Close
    Set DBConn=Nothing
    %>
    -----------------------------------------------------------------
    Voi che ne dite?

  8. #8
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    E che differenza c'è?

    ho visto la modifica......... controlla bene e capirai che hai scritto una cosa assolutamente inguardabile.....

    Edit:
    Quello che vorresti tu è una pagina che carica tutti i dati e te li fa vedere a gruppi di 5 senza però ricaricare ogni volta il recordset (e quindi la pagina). Dovresti caricare tutto in vettori con javascript e cambiare il contenuto della tabella sul client.
    Ma così, se vengono fuori 20.000 righe ammazzi la pagina...........
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

  9. #9
    Se la pagina è sempre la stessa, ogni volta che la ricarichi per passare ai record successivi, inevitabilmente ricarchi anche lo scirpt del recordset, in sostanza riesegui la pagina e reinterroghi il db

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    336
    SI D'ACCORDO. MA SE TU GUARDI IL CODICE:
    For pag=1 to objRS.PageCount
    Response.Write "<A href='Paginazione.asp?page=" & pag & "'>"
    Response.Write pag
    Response.Write "</A> "
    Next

    TI ACCORGI CHE QUANDO MI SPOSTO DA UNA PAGINA ALL'ALTRA LA PAGINA VIENE RICARICATA CON UN VALORE PAGE CHE POSSO RICAVARMI CON L'ISTRUZIONE REQUEST.
    ECCO PERCHE' TI DICEVO PRIMA CHE SOLO NEL CASO PAGE="" (PRIMO CARICAMENTO) CI CONNETTIAMO AL DATABASE E CARICHIAMO IL RECORDSET. SE INVECE PAGE HA UN VALORE, TIPO 1 O 2 O 3, NON MI SEMBRA IL CASO DI RIFARE LA CONNESSIONE POICHE' I DATI DOVREBBERO ESSERE GIA' NEL RECORDSET. COSI' HO PENSATO DI AGGIUNGERE UN END IF AL CODICE COME PUOI VEDERE NEL PRECEDENTE MESSAGGIO. MA TE LO RISCRIVO ABBREVIATO:

    page = Request("page")
    if page="" then page=1 // così se la page="" carica il recordset
    strSQL = "SELECT * FROM Prodotti" // altrimenti esegue l'AbsolutePage
    objRS.open strSQL, DBConn, 1
    objRS.PageSize = RecordsPerPagina
    end if
    objRS.AbsolutePage = page

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.