ASPDatabaserExempeldatatatBläddra några åt gången
[ Hem ] Allmänt ASP XML SQL ADO HTML CSS VB Java Design Karta
Grunder Input/output VBScript Databaser Tips Exempel

Bläddra några åt gången

Första Föregående Nästa Sista
Sidan 7 av 7
[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ]
19 Textrad 8
20 Textrad 9

Det är inte alltid så intressant att bläddra i en LÅNG lista. För att dela upp datat i mer "lättsvalda" delar kan man välja att visa ett fast antal rader per sida och sedan ge bläddringsmöjligheter

För att göra detta möjligt måsta några ändringar komma in från föregående listningsexempel

  1. Vi kan inte använda connection.Execute eftersom den skapar ett "ForwardOnly" resultat och vi behöver kunna bläddra.
  2. Vi måste säga åt Recordset objektet hur många rader det skall vara på en sida.
  3. Vi måste kunna säga åt sidan att den skall bläddra
  4. Vi måste kunna säga åt tabellen vilken sida (vilka rader) som skall visas
Lösningarna på dessa problem är:
  1. Vi skapar ett recordset objekt med
    Set recordset = Server.CreateObject("ADODB.RecordSet")
    och använder sedan
    recordset.Open SQL SATS, Connection, 1, 1
    för att öppna en "bläddringsbar" KeySet
  2. Vi kan använda recordset.PageSize = RADANTAL för att säga hur många rader som skall visas
  3. Vi kan sända via URL:n vilken sida som skall visas. T.ex ?PAGE=3 skall ta fram sidan 3
  4. Vi kan använda recordset.AbsolutePage för att ta fram en viss sida
Detta leder till:
  1. För att kontakta databasen och tabellen skriver vi
    <!-- #include file="connection.asp" -->
    Const RADANTAL = 3
    Const SQL = "SELECT * FROM EXEMPELDATA ORDER BY aTEXT"

    ' Först en "normal" öppnade av connection o recordset
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open strConn

    ' Kan INTE använda en Exeute för att öppna tabellen
    ' eftersom vi måste kunna bläddra i tabellen
    ' vi använder istället följande konstruktion
    Set RS = Server.CreateObject("ADODB.RecordSet")

    ' Den första ettan (1) betyder att vi öppnar tabellen som en
    ' KeySet. I den kan vi bläddra. Den andra ettan betyder att
    ' vi öppnar som ReadOnly...
    RS.Open SQL, Conn, 1, 1

    ' En tabell kan hanteras i lite större block genom att
    ' säga att den har en PageSize (= rader per sida )
    RS.PageSize = RADANTAL

    ' Vikan även kontrollera hur många sidor det blir med
    ' den PageSize vi gav
    MAX = RS.PageCount

  2. För att få sidan vi vill till på URL:n kan vi göra följande
    <a href="<% =Request.ServerVariables("URL")%>?PAGE=1">Första</a>

    <a href="<% =Request.ServerVariables("URL")%>?PAGE=
          <% = nuvarande sida - 1%>">Föregående</a>

    <a href="<% =Request.ServerVariables("URL")%>?PAGE=
          <% = nuvarande sida + 1%>">Nästa</a>

    <a href="<% =Request.ServerVariables("URL")%>?PAGE=
          <% = sista sidan%>">Sista</a>
    Istället för text i href:arna kan vi självklart lägga in bilder
    Men även följande lösning kan vara användbar för att sätta upp en länklista.
    <% For sida = 1 To MAX %>
       <% if sida = PAGENO Then %>

          <b>[ <%=sida%> ]</b>
       <% Else %>
          <a href="<% =Request.ServerVariables("URL")%>?PAGE=
             <% =sida %>">[ <%=sida%> ]</a>
       <% End If %>
    <% Next %>


  3. För att sedan göra någonting av den PAGE=n som kommer kan vi skriva följande:
    <%
    ' Om det fanns ?PAGE=n på adressraden så antar vi att
    ' vi vill gå till sidan n
    if Not IsEmpty(Request("PAGE")) Then
       ' kan väl kontollera att det var en siffra
       ' just in case...
       if IsNumeric(Request("PAGE")) Then
          PAGENO = CInt(Request("PAGE"))
       Else
          ' i annat fall så får det bli sidan 1
          PAGENO = 1
       End If
    else
       ' första gången till sidan - ta fram rad ett
       PAGENO = 1
    end if

    ' Vi kanske är intresserade av vilken rad som är först i listan
    ' detta kan räknas ut på följande sätt
    ROW = (PAGENO - 1) * RADANTAL + 1

    ' Stöder databasen bookmark (Access borde göra detta)
    harBookmark= RS.Supports(8192)

    If harBookmark Then
       ' gå direkt till rätt sida
       RS.AbsolutePage = PAGENO
    Else
       ' Annars (klumpigare o långsammare)
       RS.MoveFirst
       RS.Move PAGENO - 1
    End If
    %>

  4. För att visa själva listningen kan man skriva följande
    <table border="1" cellspacing="0" cellpadding="5" width="400">
    <%
    raden = 0
    Do While Not RS.EOF And raden < RADANTAL
    %>

    <!--
       Här börjar en tabellrad. Kommer att upprepas
       för förklaring till denn asp kod
    -->

       <tr>
       <!-- Först en cell med en radnummer -->
          <td align="right">
             <% =ROW + raden %>
          </td>
          <!-- och sedan innehållet i ett fält med namnet aTEXT -->
          <td>
             <% =RS("aTEXT") %>
          </td>
       </tr>
    <!-- Tabellraden tog slut -->
    <%
       raden = raden + 1
       RS.MoveNext
    Loop
    %>

    </TABLE>
Koden är kanske inte optimal ur prestandasynvinkel, utan jag har försökt göra en kod som enkelt går att modifiera för sina egna behov

Klicka på "Visa ASP koden för denna sida" länken nedan för ytterligare förklaringar

  Optimering av databaslistningarVisa mer data om posten
Databaser
Exempeldatatat
Snabbkurs i SQL
Enkel listning
Lista hela tabellen
Optimering av databaslistningar
Bläddra några åt gången
Visa mer data om posten
Resultatet av föregående kapitel
Insättning av nya poster
Uppdatering av poster
Radering av poster
Typkontroll
En JavaScript lösning för typkontroll
Resultat från valideringarna
Alternativ lösning för bläddring
Databasexempel
En gästbok
Förklaringar till gästboken
Om du vill se vad som finns i tabellerna...
Databasform
Databasform med Include


Top
< Optimering av databaslistningar Visa mer data om posten>
© Anders Enges, Vörå 2002  | 22.01.01 19:24 Visa asp koden