Källkoden för /anders.enges/asp/db4.asp
<!--#include file="../inc/navstuff.asp" -->

<!--  
     Denna rad inkuderar en fil som innehåller min strConn konstant
     Se kapitlet "Enkel Listning" för dess innehåll
-->

<!--  #include file="../inc/connection.asp" -->

<% 
' denna funktion kontrollerar om ett fält med namnet
' som finns i parametern name finns
Function fieldExists(name)
      fieldExists = false
      method = Request.ServerVariables("REQUEST_METHOD")
      if method = "POST" Then
           For each xx in Request.Form
                if xx = name Then
                     fieldExists = true
                     Exit For
                End if
           Next
      else
           For each xx in Request.QueryString
                if xx = name Then
                     fieldExists = true
                     Exit For
                End if
           Next
      End IF
End Function
%>


<%
' En generell uppdateringsmetod
Function nav_doUpdate(RS)
      Dim fieldName
      Dim fieldValue
      doUpdate = True
      For i = 0 to RS.Fields.Count - 1
           fieldName = RS(i).Name
           fieldValue = Request(fieldName)
           if Not IsEmpty(fieldValue) And fieldExists(fieldName) Then
                Select Case RS(i).Type
                     Case 7, 133, 135, 134 ' DATUM o TID
                          if IsDate(fieldValue) Then
                          ' måste vara i formen mm/dd/yyyy hh:mm:ss
                               RS(i) = Month(fieldValue) & "/" & _
                                         Day(fieldValue) & "/" & _
                                         Year(fieldValue)& " " & _
                                         Hour(fieldValue) & ":" & _
                                         Minute(fieldValue) & ":" & _
                                         Second(fieldValue)
                          Else
                               RS(i) = Null
                          End If
                     Case 8, 129, 130, 200, 202, 201, 203 ' TEXT
                          RS(i) = fieldValue
                     Case 11 ' BOOLEAN
                          RS(i) = true
                     Case Else
                          if IsNumeric(fieldValue) Then
                               RS(i) = fieldValue
                          Else
                               RS(i) = Null
                          End If
                End Select
           Else
                ' Checkboxar är lite jäkliga för de kommer inte i GET ellerm
                ' POST om de inte är satta. Jag antar att om den inte
                ' fanns så är den antagligen tom
                ' OBS! Se till att inte använda fält i SELECT satsen som
                ' inte finns i formen
                If RS(i).Type = 11 Then ' boolean o tom checkbox
                     RS(i) = false
                End IF
           End If
      Next
      RS.Update
End Function
%>


<!--  
     Dessa konstanter kan modifieras
     Deras betydelse:
      nav_BACK - texten på "tillbaka en rad" knappen
      nav_NEXT - texten på "nästa rad" knappen
      nav_LAST - texten på "sista raden" knappen
      nav_FIRST - texten på "första raden" knappen
      nav_SAVE - texten på "spara denna post" knappen
      nav_DELETE - texten på "radera denna rad" knappen
      nav_REFRESH - texten på "kolla om någon annan gjort ändringar" knappen
      nav_ABANDON - texten på "oj då, bort härifrån" knappen
      nav_ADD - texten på "skapa en ny post" knappen
      nav_METHOD - GET eller POST för formarna
-->


<%
' text på knapparna
Const nav_BACK = " <     "
Const nav_NEXT = " > "
Const nav_LAST = " >> "
Const nav_FIRST = " <<    "
Const nav_SAVE = " Spara "
Const nav_DELETE = " Radera "
Const nav_REFRESH = " Refresh "
Const nav_ABANDON = " Tillbaka utan att spara "
Const nav_ADD = " Ny "
Const nav_METHOD = "POST"
%>



<!--  
     Nedanstående kodblock skall du INTE ändra på. Fungerar med ALLA tabeller
     förutsatt att du ändrar på SELECT statsen ovan
-->

Jag är inte alls nöjd med denna sida. Skall skriva om den när jag hinner....
<!--   GENERELL KOD FÖR BLÄDDRING -->
<!--   Skulle gå att sätta i en skild fil som inkluderas vid behov -->
<%
' Har vi kommit hit för en ny post ?
if Request("nav_OTHER") <> nav_ADD Then

' Om inte så ...
' SQL sats för tabellen
' Se till att du BARA har de fält som visas i formen
' Detta går enklast att lösa med en Query som innehåller
' bara de fält som behövs
' den kan samtidigt sköta om sorteringen
' Sedan kan du ersätta
' SELECT * FROM EXEMPELDATA ORDER BY aTEXT
' med
' SELECT * FROM aQueryThatDoesAllNeeded
' Men för detta exempel duger nedanstående
nav_SQL = "SELECT * FROM EXEMPELDATA ORDER BY aTEXT"

harBookmark = True

' as usual
Set nav_Conn = Server.CreateObject("ADODB.Connection")
nav_Conn.Open strConn

' Öppna recordseten
Set nav_RS = Server.CreateObject("ADODB.RecordSet")
nav_RS.Open nav_SQL, nav_Conn, 1, 2

' vi vill bara bläddra EN rad åt gången
nav_RS.PageSize = 1

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

' Kolla hur många sidor (rader) tabellen har
nav_MAXPAGE = nav_RS.PageCount

' En HIDDEN i FORMEN har den sista sidan som vi var på
nav_PREVPAGE = Request("nav_PAGE")

' vi har tryckt på någon av bläddringsknapparna
if Request("nav_SCROLL") <> "" Then
      Select Case Request("nav_SCROLL")
           Case nav_BACK
                nav_PAGE = nav_PREVPAGE - 1
           Case nav_NEXT
                nav_PAGE = nav_PREVPAGE + 1
           Case nav_FIRST
                nav_PAGE = 1
           Case nav_LAST
                nav_PAGE = nav_MAXPAGE
      End Select
      if nav_PAGE <  1 Then
           nav_PAGE = 1
      end if
      if nav_PAGE > nav_MAXPAGE Then
           nav_PAGE = nav_MAXPAGE
      end if
else
      ' första gången till sidan - ta fram rad ett
      if Request("nav_OTHER") <> "" Then
           nav_PAGE = Request("nav_PAGE")
      Else
           nav_PAGE = 1
      End If
end if

' Stöder databasen bookmarks kan vi göra så här
If nav_BOOKMARK Then
      nav_RS.AbsolutePage = nav_PAGE
Else
      ' Annars
      nav_RS.MoveFirst
     nav_RS.Move nav_PAGE - 1
End If

if Request("nav_OTHER") <> "" Then
      Select Case Request("nav_OTHER")
           Case nav_SAVE
                If Request("nav_ISNEW") = 1 Then
                     nav_RS.AddNew
                     nav_doUpdate(nav_RS)
                else
                     'nav_RS.Edit
                     nav_doUpdate(nav_RS)
                End If
           Case nav_DELETE
                nav_RS.Delete
                If nav_BOOKMARK Then
                     nav_RS.AbsolutePage = nav_PAGE
                Else
                     nav_RS.MoveFirst
                     nav_RS.Move SidNr - 1
                End If
           Case nav_REFRESH, nav_ABANDON
                On error resume next
                nav_RS.Resync
                on error goto 0
           End Select
End If
%>


<!--   GENERELL KOD FÖR BLÄDDRING TOG SLUT -->

<!--  
     Nedanstående form kan du modifiera på följande sätt:
     Om du inte vill ha en "gå till första knapp" tar du bort HELA raden
     som skapar denna knapp. man kan även ta bort
     andra knappar genom att ta bort deras <INPUT... rader
     Rör inte HIDDEN fälten
     Den MÅSTE finnas i formen
-->


<!--   NAVIGATIONS FORMEN BÖRJAR -->

<FORM NAME="ETT_BRA_NAMN" METHOD="<%  =nav_METHOD %>">
<INPUT TYPE="SUBMIT" NAME="nav_SCROLL" VALUE="<%  =nav_FIRST %>">
<INPUT TYPE="SUBMIT" NAME="nav_SCROLL" VALUE="<%  =nav_BACK %>">
<INPUT TYPE="SUBMIT" NAME="nav_SCROLL" VALUE="<%  =nav_NEXT %>">
<INPUT TYPE="SUBMIT" NAME="nav_SCROLL" VALUE="<%  =nav_LAST %>">
<INPUT TYPE="SUBMIT" NAME="nav_OTHER" VALUE="<%  =nav_SAVE %>">
<INPUT TYPE="SUBMIT" NAME="nav_OTHER" VALUE="<%  =nav_DELETE %>">
<INPUT TYPE="SUBMIT" NAME="nav_OTHER" VALUE="<%  =nav_REFRESH %>">
<INPUT TYPE="SUBMIT" NAME="nav_OTHER" VALUE="<%  =nav_ADD %>">

<INPUT TYPE="HIDDEN" NAME="nav_PAGE" VALUE="<%  =nav_PAGE %>">


<!--  
      Sätter formens kontroller i en tabell för att enklare kunna
      laga en layout.
      Vi har tillgång till variabeln nav_PAGE som visar vilken
      sida (post) vi är på
      Dessutom har vi tillgång till
      nav_RS("FÄLTNAMN") för att få fältvärden från tabellen
-->

      <TABLE BORDER="0" cellpadding="0" cellspacing="0">

      <tr>
           <td bgcolor="#FFFFCC">
                Sidan: <B><%  =nav_PAGE %></b>
           </td>
           <td bgcolor="#FFFFCC">
                 
           </td>
      </tr>
      <tr>
      <!-- 
           För byten finns bara 0,1 och 2 som alternativ
           Därför använder jag här en grupp med Radioknappar
      -->

           <td valign="top">
                aBYTE
           </td>
           <td>
                <INPUT TYPE="RADIO"
                          NAME="aBYTE"
                          VALUE="0"
                          <%  if nav_RS("aBYTE") = 0 Then %>
                          CHECKED
                          <%  End If %>
                          >
                          Nolla
                           
                <INPUT TYPE="RADIO"
                          NAME="aBYTE"
                          VALUE="1"
                          <%  if nav_RS("aBYTE") = 1 Then %>
                          CHECKED
                          <%  End If %>
                          >
                          Etta
                           
                <INPUT TYPE="RADIO"
                          NAME="aBYTE"
                          VALUE="2"
                          <%  if nav_RS("aBYTE")= 2 Then %>
                          CHECKED
                          <%  End If %>
                          >
                          Tvåa
                           
           </td>
      </tr>

      <tr>
           <td valign="top">
                aINTEGER
           </td>
           <td>
                <INPUT TYPE="TEXT"
                          NAME="aINTEGER"
                          SIZE="40"
                          VALUE="<%  =nav_RS("aINTEGER") %>">
           </td>
      </tr>
      <tr>
           <td valign="top">
                aDOUBLE
           </td>
           <td>
                <INPUT TYPE="TEXT"
                          NAME="aDOUBLE"
                          SIZE="40"
                          VALUE="<%  =nav_RS("aDOUBLE") %>">
           </td>
      </tr>

      <tr>
           <td valign="top">
                aDATE
           </td>
           <td>
                <INPUT TYPE="TEXT"
                          NAME="aDATE"
                          SIZE="40"
                          VALUE="<%  =nav_RS("aDATE") %>">
           </td>
      </tr>

      <tr>
           <td valign="top">
                aTIME
           </td>
           <td>
                <INPUT TYPE="TEXT"
                          NAME="aTIME"
                          SIZE="40"
                          VALUE="<%  =nav_RS("aTIME") %>">
           </td>
      </tr>

      <tr>
           <td valign="top">
                aYESNO
           </td>
           <td>
                <INPUT NAME="aYESNO" TYPE="CHECKBOX" VALUE="1"
                <%  If nav_RS("aYESNO") <> 0 Then %>
                CHECKED
                <%  End If %>
                >
           </td>
      </tr>
      <tr>
           <td valign="top">
                aTEXT
           </td>
           <td>
                <INPUT TYPE="TEXT"
                          NAME="aTEXT"
                          SIZE="40"
                          VALUE="<%  =nav_RS("aTEXT") %>">
           </td>
      </tr>

      <tr>
           <td valign="top">
                aMEMO
           </td>
           <td><TEXTAREA
                     NAME="aMEMO"
                     COLS="40"
                     ROWS="8"><%  =nav_RS("aMEMO") %></TEXTAREA><br>
                     <font size="2">Netscape byter <b>inte</b> rad automatiskt i TEXTAREA! <br>IE sköter sig i mitt tycke bättre!</font>
           </td>
      </tr>
</table>
</FORM>
<!--  
      Formen tog slut
      Vi stänger tabellen och connection
-->

<%
' Vi är färdiga med tabellen för denna gång
nav_RS.Close
nav_Conn.Close
Set nav_RS = nothing
Set nav_Conn = nothing
%>


<!--  
      Om vi klickade på ADD kommer vi hit
      Orsaken till att vi har en annan form är att den avviker lite
      från den som används för uppdateringar
      Vi har bland annat inte tillgång till någon nuvarande post
      eftersom vi inte vill skapa en post före vi vet att den behövs
-->

<%  Else
if Request("nav_PAGE") <> "" Then
      nav_PAGE = Request("nav_PAGE")
Else
      nav_PAGE = 1
End If
%>


<!--  
      I denna form vill vi inte ha lika många knappar
-->

<FORM NAME="ETT_BRA_NAMN" METHOD="<%  =nav_METHOD %>">
<!--  Knappen för spara -->
      <INPUT TYPE="SUBMIT" NAME="nav_OTHER" VALUE="<%  =nav_SAVE %>">
<!--  Knappen för oj då, hur hamnade jag hit? -->
      <INPUT TYPE="SUBMIT" NAME="nav_OTHER" VALUE="<%  =nav_ABANDON %>">
<!-- 
      Ifall vi ångrade oss kanske det kan vara bra att veta
      vilken sida vi kom från
-->

     <INPUT TYPE="HIDDEN" NAME="nav_PAGE" VALUE="<%  =nav_PAGE %>">
<!-- 
      När vi tar fram uppdateringsformen kanske det kan det vara
      bra att veta att vi kom från denna form så vi vet att vi måste
      lägga till en post innan vi sätter in värdena
-->

      <INPUT TYPE="HIDDEN" NAME="nav_ISNEW" VALUE="1">
<!-- 
      Samma form som ovan men utan värden
-->

      <TABLE BORDER="0" cellpadding="0" cellspacing="0">

      <tr>
           <td bgcolor="#FFFFCC">
                Sidan: <B>NY</b>
           </td>
           <td bgcolor="#FFFFCC">
                 
           </td>
      </tr>
      <tr>
      <!-- 
           För byten finns bara 0,1 och 2 som alternativ
           Därför använder jag här en grupp med Radioknappar
      -->

           <td valign="top">
                aBYTE
           </td>
           <td>
                <INPUT TYPE="RADIO"
                          NAME="aBYTE"
                          VALUE="0"
                          CHECKED
                          >
                          Nolla
                           
                <INPUT TYPE="RADIO"
                          NAME="aBYTE"
                          VALUE="1"
                          >
                          Etta
                           
                <INPUT TYPE="RADIO"
                          NAME="aBYTE"
                          VALUE="2"
                          >
                          Tvåa
                           
           </td>
      </tr>

      <tr>
           <td valign="top">
                aINTEGER
           </td>
           <td>
                <INPUT TYPE="TEXT"
                          NAME="aINTEGER"
                          SIZE="40"
                          >
           </td>
      </tr>
      <tr>
           <td valign="top">
                aDOUBLE
           </td>
           <td>
                <INPUT TYPE="TEXT"
                          NAME="aDOUBLE"
                          SIZE="40"
                          >
           </td>
      </tr>

      <tr>
           <td valign="top">
                aDATE
           </td>
           <td>
                <INPUT TYPE="TEXT"
                          NAME="aDATE"
                          SIZE="40"
                          >
           </td>
      </tr>

      <tr>
           <td valign="top">
                aTIME
           </td>
           <td>
                <INPUT TYPE="TEXT"
                          NAME="aTIME"
                          SIZE="40"
                          >
           </td>
      </tr>

      <tr>
           <td valign="top">
                aYESNO
           </td>
           <td>
                <INPUT NAME="aYESNO" TYPE="CHECKBOX" VALUE="1"
                >
           </td>
      </tr>
      <tr>
           <td valign="top">
                aTEXT
           </td>
           <td>
                <INPUT TYPE="TEXT"
                          NAME="aTEXT"
                          SIZE="40"
                          >
           </td>
      </tr>

      <tr>
           <td valign="top">
                aMEMO
           </td>
           <td><TEXTAREA
                     NAME="aMEMO"
                     COLS="40"
                     ROWS="8"></TEXTAREA><br>
                     <font size="2">Netscape byter <b>inte</b> rad automatiskt i TEXTAREA! <br>IE sköter sig i mitt tycke bättre!</font>
           </td>
      </tr>
</table>
</FORM>
<%  End If %>
<!-- 
      Ovanstpende End If hör ihop med
      if Request("nav_OTHER") <> nav_ADD Then
      som betämmer om vi vill lägga till eller
      editera
-->


<!--#include file="../inc/footer.asp" -->