In diesem Artikel wird hauptsächlich die Anzeige von ADO -Datenbank -Paging vorgestellt.
Wie können wir die Abfrageergebnisse der Datenbank paginieren? Es gibt tatsächlich viele Möglichkeiten, aber es gibt zwei Hauptmethoden:
1. Lesen Sie alle Datensätze in der Datenbank, die die Abfragebedingungen gleichzeitig in den Datensatz erfüllen, und speichern Sie sie im Speicher. (Seitenzahl) und AbsolutePage (Absolute Seite) zur Verwaltung der Paging -Verarbeitung.
2. Gemäß den Anweisungen des Kunden muss die angegebene Anzahl der Datensätze ausgelesen und aus den Datensätzen angezeigt werden, die die Abfragebedingungen jedes Mal entsprechen.
Der Hauptunterschied zwischen den beiden besteht darin, dass erstere alle Aufzeichnungen gleichzeitig in das Gedächtnis liest und dann nach den Anweisungen Urteile und Analysen nach den Anweisungen beurteilt, um die Auswirkung der Paginierungsanzeige zu erzielen, während die letzteren auf der Grundlage der Anweisungen Urteile fällen und die festlegen und die festlegen Die angegebene Nummer, um die Abfragebedingungen zu erfüllen.
Wir können deutlich das Gefühl haben, dass, wenn die Anzahl der Datensätze in der Datenbank Zehntausende oder mehr erreicht, die Ausführungseffizienz der ersten Methode erheblich niedriger ist Übertragen werden. Wenn jedoch die Anzahl der Datensätze in der Datenbank auf dem Server und die Anzahl der Personen online nicht groß ist, ist die Ausführungseffizienz der beiden fast gleich. Das ASP -Programm der ersten Methode ist relativ geschrieben. Die zweite Methode ist viel einfacher und klar.
Hier nimmt der Autor unser gemeinsames ASP -BBS -Programm als Beispiel, um zu analysieren, wie die Paginationsanzeigefunktion im BBS -Programm implementiert wird. zu viele.
Die Pagination wird angezeigt, wenn ADO auf die Datenbank zugreift, um die Datensätze des Datensatzes zu bedienen. Daher müssen wir zunächst die Eigenschaften und Methoden des Reordset -Objekts verstehen:
BOF -Attribut: Der aktuelle Indikator bezieht sich auf die erste Transaktion zum Datensatz.
EOF -Attribut: Der aktuelle Indikator bezieht sich auf die letzte Transaktion zum Datensatz.
MOVE -Methode: Metriken auf einen Datensatz im Datensatz verschieben.
AbsolutePage -Eigenschaft: Legt den aktuellen Standort des Datensatzes fest.
PageCount -Eigenschaft: Zeigt an, wie viele Seiten von Daten ein Datensätze -Objekt enthält.
PageSize -Eigenschaft: Zeigt die Anzahl der Aufzeichnungen an, die auf jeder Seite des Recordset -Objekts angezeigt werden.
RecordCount -Eigenschaft: Zeigt die Gesamtzahl der Datensätze des Recordset -Objekts an.
Schauen wir uns diese wichtigen Attribute und Methoden genauer an
1. BOF- und EOF -Attribute
Normalerweise schreiben wir Code in ein ASP -Programm, um die BOF- und EOF -Attribute zu überprüfen, um den Speicherort des Datensatzes zu kennen, auf das der aktuelle Indikator verwendet wird. Linie ist der Umfang des Recordset -Objekts wurde überschritten.
Zum Beispiel: < %wenn nicht rs.eof dann ... %>
< % wenn nicht (Rs.Bof und Rs.eof) %>
Wenn die aktuelle Datensatzposition vor der ersten Zeile eines Recordset -Objekts liegt, gibt die BOF -Eigenschaft true zurück, andernfalls gibt sie false zurück.
Wenn die aktuelle Datensatzposition nach der letzten Zeile eines Recordset -Objekts erfolgt, gibt die EOF -Eigenschaft true zurück, andernfalls gibt sie false zurück.
Sowohl BOF als auch EOF sind falsch: bedeutet, dass sich der Indikator im Datensatz befindet.
BOF ist wahr: Der aktuelle Indikator bezieht sich auf den ersten Datensatz zum Datensatz. EOF ist wahr: Der aktuelle Indikator bezieht sich auf den letzten Datensatz zum Datensatz.
Sowohl BOF als auch EOF sind wahr: Es gibt keinen Datensatz im Datensatz.
2. Verschieben Sie die Methode
Sie können die Move -Methode verwenden, um Metriken auf einen Datensatz im Datensatz mit der Syntax wie folgt zu verschieben:
rs.move numrecords, starten Sie
Hier ist RS eine Objektvariable, in der ein Datensatz angibt, das sich bei der aktuellen Datensatzposition bewegen möchte. das Startetik.
Alle Rekordobjekte unterstützen die Verschiebungsmethode. Methode, der ein Fehler wird generiert.
MOVEFIRST -Methode: Verschieben Sie die aktuelle Datensatzposition auf den ersten Datensatz.
MOVELAST -Methode: Verschieben Sie die aktuelle Datensatzposition auf den letzten Datensatz.
MOVENEXT -Methode: Verschieben Sie die aktuelle Datensatzposition auf den nächsten Datensatz. MovePrevious -Methode: Verschieben Sie die aktuelle Datensatzposition auf den vorherigen Datensatz.
Move [n] Methode: Verschieben Sie den Index in den n -ten Stiftdatensatz, n startet von 0.
3.. Absolutepage -Attribute
Die AbsolutePage -Eigenschaft legt die Seitenzahl der Seiten fest, auf denen sich die Seite befindet. Pagessize -Datensätze). Es muss hier angemerkt werden, dass nicht alle Datenanbieter diese Eigenschaft unterstützen. Seien Sie also vorsichtig, wenn Sie sie verwenden.
Das Gleiche wie die AbsolutePosition -Eigenschaft, beginnt die Absolutepage -Eigenschaft mit 1. Wenn der aktuelle Datensatz die erste Zeile des Rekordsets ist, beträgt der Absolutepage 1. Die AbsolutePage -Eigenschaft kann so eingestellt werden, dass sie in die erste Zeilenrekordposition einer angegebenen Seite wechseln.
4. Absolutepositionseigenschaft
Wenn Sie den aktuellen Standort der Metrik im Datensatz festlegen müssen, können Sie die AbsolutePosition -Eigenschaft verwenden.
Der Wert der Absolutepositionseigenschaft ist die Position des Stromindikators relativ zur ersten Transaktion, die ab 1 beginnt, dh die Absoluteposition der ersten Transaktion ist 1.
Beachten Sie, dass beim Zugriff auf Datensätze keine Garantie dafür gibt, dass Datensätze jedes Mal in derselben Reihenfolge angezeigt werden.
Um AbsolutePosition zu ermöglichen, müssen Sie es zunächst so einstellen, dass der Benutzer Cursor (Zeiger) verwendet wird, und der ASP -Code lautet wie folgt:
rs2.cursorLocation = 3
5. PageCount -Eigentum
Verwenden Sie die PageCount -Eigenschaft, um festzustellen, wie viele Seiten von Daten ein Datensatz eingesetzt werden. Die Seite hier ist eine Sammlung von Datensätzen, und ihre Größe entspricht der Einstellung der PageSize -Eigenschaft. . Es muss beachtet werden, dass nicht alle Datenanbieter diese Eigenschaft unterstützen.
6. Pagesize -Eigenschaft
Die PageSize -Eigenschaft ist der Schlüssel zur Bestimmung, wie Ado beim Zugriff auf Datenbanken paginiert. Setzt und erstellt eine Seitengröße, sodass die AbsolutePage -Eigenschaft auf den ersten Aufzeichnung anderer logischer Seiten verschoben werden kann. Die PageSize -Eigenschaft kann jederzeit festgelegt werden.
7. RecordCount -Eigentum
Dies ist auch eine sehr häufige und wichtige Eigenschaft. Zum Beispiel: < %Totle = Rs.RecordCount %>
Nachdem Sie die oben genannten Eigenschaften und Methoden von Datensatzobjekten verstanden haben, sollten Sie überlegen, wie Sie sie verwenden, um den Zweck unserer Pagination zu erreichen. Zunächst können wir einen Wert für die PageSize -Eigenschaft festlegen, wodurch die Anzahl der Zeilen angibt, die eine Seite aus der Datensatzgruppe bilden. Um die angezeigte Seitenzahlen zu erhalten; Es scheint sehr nicht kompliziert zu sein.
Wir haben eine so einfache BBS -Anwendung aufgebaut, die die folgenden Felder in der Datenbank enthält: ID, automatische Nummer jedes Beitrags; Zeitpunkt der Veröffentlichung. Der DSN der Datenbank ist BBS. Wir haben alle Schritte bei der Anzeige von Post Paging in einem Prozess namens Showlist () für einen einfachen Anruf eingesetzt. Das Verfahren ist wie folgt:
?
- '---- bbs zeigt Post Paging an ---
- <%Subshowlist ()%>
- <%
- PGSZ = 20 'Einstellungsschalter, geben Sie die Anzahl der auf jeder Seite angezeigten Beiträge an. Die Standardeinstellung beträgt 20 Beiträge pro Seite
- SetConn = server.createObject (adodb.Connection)
- Setrs = server.createObject (adodb.recordset)
- SQL = SELECT*FromessageOrdByIdDesc
- 'Fragen Sie alle Beiträge ab und ordnen Sie sie in umgekehrter Reihenfolge nach Post -ID an
- Conn.openbbs
- Rs.opensql, Conn, 1,1
- IFRS.RecordCount = 0Then
- Antwort. </center> </p>
- anders
- Rs.PageSize = Cint (PGSZ) 'Stellen Sie den Wert der PageSize -Eigenschaft fest
- Total = int (Rs.RecordCount/PGSZ*-1)*-1'Calculate die Gesamtzahl der Seiten, die angezeigt werden können
- Pageno = Anfrage (Pageno)
- ifpageno = dann
- Pageno = 1
- anders
- Pageno = pageno+1
- Pageno = pageno-1
- Endif
- Scrollaction = request (Scrollaction)
- ifScrollaction = vorherige Seite dann
- Pageno = pageno-1
- Endif
- ifScrollaction = nächste Seite dann
- Pageno = pageno+1
- Endif
- Ifpageno <1Then
- Pageno = 1
- Endif
- n = 1
- Rs.absolutepage = Pageno
- Response.write <center>
- Position = Rs.PageSize*Pageno
- PageBegin = Position-Rs.PageSize+1
- IfPosition <Rs.RecordCountthen
- pagend = Position
- anders
- pagend = rs.Recordcout
- Endif
- Response.write <p> <fontcolor = 'navy'> <b> Datenbankabfrageergebnisse: </b>
- Response.write (es gibt insgesamt & rscordCount und Informationen, die die Bedingungen, Anzeige & PageBegin &-& Pagend &) </font> </p> erfüllen
- Antwort
- Antwort.Write <trbgcolor =#5fb5e2> <fontsize = 2> <td> <b> Thema </b> </td> <td> <b> Benutzer </b> </td> <td> <b> E -Mail </b> </td> <td> <b> Veröffentlichtes Datum </b> </td> </font> <trbgcolor =#ffffff>
- Dowhilenot (rsisnothing)
- RowCount = rs.pageSize
- Dowhilenotrs.eofandrowcount> 0
- IFN = 1Then
- Response.write <trbgcolor =#ffffff>
- ANDERS
- Response.write <trbgcolor =#eeeee>
- Endif
- n = 1-n%>
- <Td> <spanStyle = Schriftgröße: 9PT> <AHREF = 'View.asp? Key = <%= rs (id)%>'> <%= RS (Betreff)%> </a> </span> </td>
- <Td> <spanStyle = Schriftgröße: 9PT> <%= RS (Name)%> </a> </span> </td>
- <Td> <spanStyle = Schriftgröße: 9PT> <Ahref = mailto: <%= RS (E-Mail)%>> <%= RS (E-Mail)%> </a> </span> </td>
- <Td> <spanStyle = Schriftgröße: 9PT> <%= rs (postdate)%> </span> </td>
- </Tr>
- <%
- RowCount = RowCount-1
- Rs.Movenext
- Schleife
- setrs = rs.NexTrecordset
- Schleife
- Conn.close
- setrs = nichts
- setConn = nichts
- %>
- </Table>
- <FormMethod = getAction = list.asp>
- <InputType = hidDdenname = pagenovalue = <%= pageno%>>
- <%
- Ifpageno> 1Then
- response.write <inputType = subjektname = 'scrollaction'Value =' vorherige Seite '>
- Endif
- ifrowCount = 0andpageno <> TotalThen
- response.write <inputType = subjektname = 'scrollaction'Value =' nächste Seite '>
- Endif
- response.write </form>
- Endif
- %>
- <%EndUb%>