 Källkoden för /anders.enges/asp/dbfirst.asp
 Källkoden för /anders.enges/asp/dbfirst.asp 
<!--#include file="../inc/navstuff.asp" -->
<P><A href="#97">Access 97 databaser</A><BR><A href="#2000">Access 2000 databaser (MDAC 2.x)</A><BR><A href="#sorg">En liten sorglig sak som beör MDAC 2.x</A></P>
<H4>Access 97</H4><A name=97></A>Samtliga exempel förutsätter att ni har en fil men namnet <B>connection.asp</B> som skall innehålla följande (OBS! En enda rad)<BR>
<DIV class=code><SPAN class=asp><%<BR>Const strConn = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=<B>C:\databaser\aspkurs.mdb</B>; <FONT color=#006400><I>DriverId=25; FIL=MS Access; MaxBufferSize=<B>8192</B>; MaxScanRows=8; PageTimeout=5; SafeTransactions=0; Threads=<B>100</B>;"</I></FONT><BR>%></SPAN> </DIV>
<P>Allt med <I><FONT color=#006400>kursiv och grön stil</FONT></I> kan bortlämnas om man snabbt vill testa och är nöjd med default värdena (som inte alltid är så lyckade) 
<P>Om du har satt din databas i en underkatalog till dina websidor kan du använda följande konstruktion: 
<DIV class=code><SPAN class=asp><%<BR>strConn = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("./databaser/aspkurs.mdb") & "</B> <FONT color=#006400><I>DriverId=25; FIL=MS Access; MaxBufferSize=<B>8192</B>; MaxScanRows=8; PageTimeout=5; SafeTransactions=0; Threads=<B>100</B>;"</I></FONT>;"<BR>%></SPAN></DIV>Denna fil kan modifieras vid behov 
<OL>
<LI>Ändra databasnamnet och katalogen enligt behov<BR>
<LI>Har du mindre än 64 MB ram så minska MaxBufferSize från 8192 till 4096<BR>
<LI>Räknar du med låg belastning kan Threads minskas </LI></OL>(Inställningarna tagna från tester med det ökända <I>VapVal</I> systemet = tål hög momentan belasting. Egentligen vet jag väl inte vad allt betyder, men skit samma, det fungerar!) 
<P>
<H4>Access 2000</H4><A name=2000></A>Har ni installerat ADO/MDAC 2.x (<A href="http://www.microsoft.com/data/">http://www.microsoft.com/data/</A>) och skapat databsen med Access 2000 använder ni följande konstruktion istället: 
<DIV class=code><SPAN class=asp><%<BR>Const strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<B>C:\databaser\aspkurs.mdb</B>;" %></SPAN> </DIV>Eller om du har databasen i en <B>databaser</B> katalog under din site: 
<DIV class=code><SPAN class=asp><%<BR>strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &<B>Server.MapPath("./databaser/aspkurs.mdb") & "</B>;" %></SPAN> </DIV>Observera att denna rad även fungerar med Access 97 men det är ingen större prestandafördel om ni inte har en Access 2000 databas. Detta eftersom OLEDB automatiskt "slår ner" till version 3.5 som i sin tur använder Jet Engine 3.5. 
<P>
<P>Sök i Visual Studio 6.0 hjälpen eller på microsfts websajt efter <B>"OLE DB Provider for Microsoft Jet"</B> för mer om inställningar i OLEDB </P>
<P><A name=sorg></A>
<H4>En liten sorglig sak som beör MDAC 2.x</H4>
<P>Om du har satt databaserna i en helt separat katalog som inte finns under wwwroot eller din site så fungerar databaserna utan problem, men...</P>Om du har satt dina databaser i en underkatalog till din site kommer du att få probmel i och med en eventuell uppdatering till MDAC 2.x (2.5 sp1 i mitt fall).<BR>Om du försöker dig på t.ex. följande kod: 
<DIV class=code><SPAN class=asp><%<BR>Set Conn = Server.CreateObject("ADODB.Connection")<BR>Conn.Open strConn<BR>strSQL = "UPDATE MY_COUNTER SET my_counter = [my_counter]+1"<BR>Conn.Execute strSQL <BR>%></SPAN> </DIV>så kommer du att få ett glatt meddelande i stil med: 
<DIV class=res><FONT face=Arial size=2>
<P>Microsoft JET Database Engine</FONT> <FONT face=Arial size=2>error '80004005'</FONT> 
<P><FONT face=Arial size=2>Operation must use an updateable query.</FONT> line 12</FONT> </P></DIV>eller 
<DIV class=res><FONT face=Arial size=2>
<P>Microsoft OLE DB Provider for ODBC Drivers</FONT> <FONT face=Arial size=2>error '80004005'</FONT> 
<P><FONT face=Arial size=2>[Microsoft][ODBC Microsoft Access Driver] Operation must use an updateable query.</FONT> line 12</FONT> </P></DIV>
<P>beroende på om du använde Provider=... eller Driver=...</P>
<P>Lösningen är att man måste göra följande:</P>
<OL>
<LI>Starta NT/Windows Explorern 
<LI>Sök fram den katalog som innehåller sin site 
<LI>Välj databaskatalogen 
<LI>Högerklicka på katalogen och välj <B>Properties</B> 
<LI>Välj fliken <B>Security</B> 
<LI>Klicka på <B>Permissions</B> knappen 
<LI>Sök fram IUSR_<B>xxxxx</B> (Internet Guest Account), där <B>xxxxx</B> är datorn/serverns namn 
<LI>Om där står <B>Special Access (RX)</B> dubbelklickar du på den raden 
<LI>Se till att även <B>Write (W)</B> är valt och tag <B>OK</B> 
<LI>Om IUSR_xxxxx inte finns i listan måste du ta <B>Add</B> 
<LI>Välj vid behov rätt domän i <B>List Names From</B> och klicka sedan på <B>Show Users</B> 
<LI>Välj i listan IUSR_xxxxx och klcka på <B>Add</B> 
<LI>Gör sedan som i punkt 7 ovan 
<LI>Stäng Permissions dialogen och svara jakande på eventuella frågor om replace .... 
<LI>Kontrollera för säkerhets skull att Permissions på din <B>.mdb</B> fil är RXW för IUSR_xxxxx </LI></OL>
<P>Och detta är ju förstås lätt att utföra på en Internet Providers server ???! Oh, Sweet World...</P>
<P>Varför blir jag nervös över write rättigheterna ??? Se för guds skull till att inte IIS har Write rättigheter. Endast Read behövs. Se mer i artikeln <B>"Untangling Web Security: Getting the Most from IIS Security"</B> i MSDN</P>
<P>Eftersom databasexemplen modifierar en verklig tabell så finns det alltid risken att någon modifierat eller radera allt data. Om så är fallet så finns det här en länk till en sida som kan återställa exempeltabellen <A target=_text href="resetDatabase.asp">[resetDatabase.asp]</A> </P>
<P>Se även <A href="db.asp">db.asp</A> för en beskrivning över exempeldatat </P>
<P>Observera att databasen inte skall finnas i en katalog som har webaccess och absolut inte i samma katalog som de övriga sidorna 
<P></P>
<!--#include file="../inc/footer.asp" -->