- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- Paginazione risultati query
-
Paginazione risultati query
Ciao a tutti, avrei bisogno di aiuto per implementare se possibile la paginazione dei risultati in un motore di ricerca asp su db access datato ma perfettamente funzionante.. Dovrei visualizzare max 8/10 risultati per pagina e la classica barra di navigazione tra le pagine. Vi posto il codice intanto per sapere se è possibile farlo e nel caso qual'è il modo migliore..
<% strBody = "" For i = 1 To Request.Form.Count strBody = strBody & Request.Form.Key(i) & ": " & Request.Form.Item(i) & "<br>" Next Trattativa=Request.Form ("Trattativa") Localita=Request.Form ("Localita") Categoria=Request.Form ("Categoria") sql="select * from immobili " sql=sql & " where 1=1" if Trattativa<>"Tutte" then sql=sql & " and Trattativa like '%" & Trattativa & "%'" end if if Localita<>"Tutte" then sql=sql & " and Localita like '%" & Localita & "%'" end if if Categoria<>"Tutte" then sql=sql & " and Categoria like '%" & Categoria & "%'" end if sql=sql & " order by Codice DESC " Set OBJdbConnection = Server.CreateObject("ADODB.Connection") OBJdbConnection.Open"driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("immobili2.mdb") Set RS = Server.CreateObject("ADODB.RecordSet") RS.Open "Immobili", OBJdbConnection Set RS=OBJdbConnection.Execute(sql) %> <% If rs.EOF Then %> <p><div align=center><h1>Nessun immobile trovato</h1></p> <% Else response.write ("<div align=center><h1>Immobili trovati</h1><br><table width=100% border=1 bordercolor=white><tr><td align=center><h4>Anteprima</h4></td><td align=center><h4>Codice</h4></td><td align=center><h4>Categoria</h4></td><td align=center><h4>Trattativa</h4></td><td align=center><h4>Località</h4></td><td align=center><h4>Condizioni</h4></td><td align=center><h4>Metratura MQ</h4></td><td align=center><h4>Prezzo ?</h4></td><td align=center><h4>Descrizione</h4></td><td align=center><font color=red><h4>Video</h4></font></font></td></tr>"):i=0%> <% Do while NOT RS.EOF i=i+1 %> <TR> <td align=center> <%response.write" <img src=""" & RS("Anteprima") & """>" %></td> <td align=center> <%Codice=rs("Codice") %> <a href="../<%=Codice%>.html" target=_blank> <%=Codice%></a></td> <td align=center><%response.write(RS("Categoria")) Categoria=rs("Categoria")%></td> <td align=center><%response.write(RS("Trattativa")) Trattativa=rs("Trattativa")%></td> <td align=center><%response.write(RS("Localita")) Localita=rs("Localita")%></td> <td align=center><%response.write(RS("Condizioni")) Condizioni=rs("Condizioni")%></td> <td align=center><%response.write(RS("Metratura")) Metratura=rs("Metratura")%></td> <td align=center><%response.write(RS("Prezzo")) Prezzo=rs("Prezzo")%></td> <td align=center> <a href="../<%=Codice%>.html" target=_blank> Visualizza dettagli</a> </td> <td align=center><a href="../<%=Codice%>.html" target=_blank> <%response.write" <img src=""" & RS("Video") & """ border=0>" %></a></td> </tr> <% RS.MoveNext Loop RS.Close OBJdbConnection.Close Set OBJdbConnection = Nothing %> <% End If %> </table>
accetto anche eventuali consigli su nuove soluzioni avendo a disposizione db mysql per migliorare le funzionalità del motore (chiaramente valuto anche proposte da retribuire...)
-
Ciao Alcolico82, e passare a .NET con MSSQL nella sua versione free?
Per l'accesso ai dati potresti usare per questa pagina (...e tutte le altre) Entity Framework. La paginazione risiederebbe nel controllo GridView, inoltre se avessi bisogno di velocizzare la presentazione dei dati sarebbe sufficiente costruire una StoredProcedure con la gestione del PageIndex. In questo modo i dati trasmessi dal Server al Client sarebbero solo quelli necessari alla presentazione e non l'intero DataSet.Ne migliorerebbe enormemente sia la manutenibilità che la produttività.
-
Ciao e grazie per la risposta, ammettendo la mia ignoranza in materia sinceramente ho capito ben poco.. Hai qualche esempio da mostrarmi o direttamente un lavoretto (retribuito) da propormi??
-
Più che un esempio dovresti imparare a conoscere le tecnologie che ti ho proposto. .NET è il nuovo FrameWork di sviluppo di Microsoft, MSSQL è il DataBase, la versione free del 2008 (Express Edition) ha poche limitazioni, 10Gb di spazio disco occupabile, 1 CPU ed 1 Gb di RAM utilizzabili (http://recruitmentexchange.com/download/SQL2008_editions_features.pdf)
Entity Framework: detto in soldoni, prima disegni il DB poi lo agganci alla Solution su Visual Studio e lui ti genera in automagico tutte le classi relative alle tabelle del DB, i membri di queste classi rappresentano a loro volta le colonne della tabella, già tipizzati (string, int, decimal, datetime, bool & so on...).
La **GridView **è un controllo che disegna sulla pagina web una griglia (che puoi "stilizzare" come preferisci.) Ecco un esempio prendendo esempio dal tuo codice:
<asp:GridView ID="gvImmobili" runat="server" CellPadding="4" ForeColor="#333333" GridLines="Horizontal" Width="100%" AllowPaging="True" AutoGenerateColumns="False" EmptyDataText="Nessun immobile trovato" ShowHeaderWhenEmpty="True" onrowcommand="gvImmobiliRowCommand" onrowdatabound="gvImmobiliRowDataBound" onpageindexchanging="gvImmobiliPageIndexChanging"> <AlternatingRowStyle BackColor="White" /> <Columns> <asp:BoundField DataField="Categoria" HeaderText="Categoria" /> <asp:BoundField DataField="Trattativa" HeaderText="Trattativa" /> <asp:BoundField DataField="Localita" HeaderText="Località" /> .... Altri campi </Columns> <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" /> <HeaderStyle BackColor="#488E22" Font-Bold="True" ForeColor="White" HorizontalAlign="Left" /> <PagerStyle BackColor="#488E22" ForeColor="White" HorizontalAlign="Center" /> <RowStyle BackColor="#E3EAEB" /> <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" /> </asp:GridView>
Mentre il codice "dietro le quinte" potrebbe essere qcs del genere:
var lista = new Immobili().ListaImmobiliCompleta(); gvImmobili.DataSource = lista; if (index.HasValue) gvImmobili.PageIndex = index.Value; gvImmobili.DataBind();
That's all falk (o quasi...)
ListaImmobiliCompleta()
public Immobili[] ListaImmobiliCompleta() { return (from c in _oc.Immobili select c).ToArray(); }
Dove _oc è l'ObjectContext, ovvero il corrispottivo del mondo ADO, solo che non devi fare (o meglio non devi scrivere... tutte le volte i metodi di accesso ai dati ecc...
Per un eventuale offerta sul "lavoretto" mandami 2 righe di scpecifiche che ti valuto il lavoro...
Ciao
Marco
-
Il sistema più rapido e performante di paginare dal mio punto di vista e farlo fare direttamente alla sorgente da SQL Server: esiste l'istruzione BETWEEN che serve appunto a questo (non so se sia disponibile solo da SQL Server 2008 in poi).
Io ho fatto esattamente così, se vai a vedere il blog che ho realizzato in ASP.NET, ogni pagina contiene massimo 5 articoli.
[...]
-
Scusa IgorDR, non ho capito cosa intendi: L'istruziuone T-SQL BETWEEN serve a specificare un intervallo sì, ma fra due campi in un istruzione WHERE ad esempio
**WHERE **@Parametro **BETWEEN **CAMPO1 **AND **CAMPO2
non capisco come possa sposarsi con la paginazione di un RecordSet???
-
WITH Risultati AS
(
SELECT IDColumn, ..., ROW_NUMBER() OVER (ORDER BY DateField) AS RowNum
FROM MyTable
)SELECT *
FROM Risultati
WHERE RowNum BETWEEN 10 AND 20;
-
Sì, ma non è la **BETWEEN **che dovrebbe essere al centro dell'attenzione ma l'uso della Function ROW_NUMBER() che permette di attribuire una numerazione "volante" al RecordSet preso in considerazione, ed era proprio quello a cui mi riferivo con la frase: > inoltre se avessi bisogno di velocizzare la presentazione dei dati sarebbe sufficiente costruire una StoredProcedure con la gestione del PageIndex.
La Function è disponibile dalla versione 2005 di SQL e l'ho usata di recente per risolvere un problema ad un cliente con un problema sulla visualizzazione di una pagina molto lenta. Lì il DB è proprio SQL Server 2005
-
grazie per le risposte molto precise, già la cosa mi è più chiara e posso valutare il da farsi...
-
[...]