 Källkoden för /anders.enges/asp/db4.asp
 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" -->