Voor je begint aan deze tutorial lees je best even de basis tutorials ASP. Ik ga er ook van uit dat je weet hoe je een waarde uit een formulier ophaalt, als je dit echter nog niet weet is dat geen drama daar het erg simpel is. Kennis van SQL-queries is wel vereist, kijk daarvoor ook even naar de basis tutorials op onze site.
Aan het einde van deze tutorial ben je dus in staat een ASP-script te maken dat communiceert met een Acces-database.
1. Klaarmaken van de database
Eerst en vooral open we Microsoft Office Acces. Ik maak op mijn screenshots gebruik van Microsoft Acces 2003, in een versie XP of lager is dit echter hetzelfde.
Maak een nieuwe database aan. We noemen onze database sitemasters.mdb.
Klik in het hoofdvenster (zie bovenstaande screenshot) op "Tabel maken in ontwerpweergave". (Het venster dat je nu te zien krijgt doet bij de PHP'ers hoogswaarschijnlijk een lichtje branden daar dit erg goed lijkt op een in programma gegoten phpmyadmin.)
Maak in het volgende venster de volgende velden aan:
id (AutoNummering & primaire sleutel)
naam (Tekst)
iq (Numeriek)
Onderaan kan je nog enkele opties instellen voor deze velden, maar daar ga ik nu niet verder op in.
Sla de tabel op als "iqtabel" en sluit het venster. Sluit nu ook je de database, zodat we geen fouten krijgen tijdens de ontwikkeling van ons script i.v.m. bestanden die reeds in gebruik zijn.
2. ASP en databases
De database is klaar, nu komt het script-gedeelte. We gaan een simpel scriptje maken: een lijstje met namen en hun overeenkomstig IQ.
Om te kunnen communiceren met databases zijn er 2 manieren. Ofwel gaan we rechtstreeks (OLEDB) via eens script verbinden met de database, ofwel gaan we via DSN (onrechtstreeks). De tweede manier is omslachtiger, omdat er dan via het Configuratiescherm een verbinding moet ingesteld worden die kan gebruikt worden in het script.
2.1
OLEDB
Hieronder volgt het script waarbij van deze methode gebruikt wordt gemaakt. De uitleg staat er bij.
1<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> 2<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"> 3<html> 4<head> 5<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 6<title>IQ Tabel</title> 7</head> 8 9<body>10<%
11DIM connectie, database
12'Declaratie1314database = Server.mappath("sitemasters.mdb")
15' Met de functie mappath()16' verkrijgen we het volledige pad van de database17connectie ="PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="& database &";"18' Op deze manier maken we de connectie via OLEDB.19' Er is ook nog de andere manier, ODBC, maar die20' is trager en dus af te raden. Die haal ik hier dus21' niet aan.22DIM verbinding
23SET verbinding = Server.CreateObject("ADODB.Connection")
24' We maken het object voor de verbinding aan25verbinding.open connectie
26' Het openen van de verbinding, met als tweede parameter 'connectie'27' Nu de verbinding gemaakt is moeten we een tabelletje maken en dmv een query28' gegevens ophalen29%>30<table cellpadding="4" cellspacing="0" border="0" style="border: 1px solid #000000;">31<tr>32<td style="background-color:#CCCCCC; border-bottom: 3px double #000000; ">Naam:</td>33<td style="background-color:#CCCCCC; border-bottom: 3px double #000000; ">IQ:</td>34</tr>35<%
36' Onze query ziet er simpelweg als volgt uit:37DIM query
38' Declaratie39 query ="SELECT * FROM iqtabel ORDER BY iq DESC"40' Zo halen we alle rijen op, gesorteerd op iq van hoog naar laag41DIM rij
42' Declaratie43SET rij = verbinding.Execute(query)
44' Uitvoeren van de query, en dat in de variabele "rij" duwen45WHILENOT rij.EOF
46' Rijtjes afdrukken met een WHILE-lus47 %>48<tr>49<td><%=rij("naam")%></td>50<td><%=rij("iq")%></td>51</tr>52<%
53 rij.MoveNext
54' Volgende rij55WEND56' Einde WHILE57 %>58</table>59<%
60verbinding.close
61SET verbinding =nothing62'Verbinding sluiten en wissen63%>64</body>65</html>
Wanneer we dit script even proefdraaien zien we enkel de tabelkop, wat ook logisch is, onze tabel is leeg.
2.2 DSN
Deze methode is omslachtiger, maar is soms wel vereist bij bepaalde hosts. Je moet eerst een verbinding instellen op de server zelf. Sommige hosts hebben hier een net controlpanel voor. Als je echter zelf host (homeservertje) staat hieronder even hoe je zo'n ding instelt. Het voorbeeld is gedaan op Windows 2003 (Engelse versie), bij Windows XP/... kan dit dus wat afwijken, maar het komt op hetzelfde neer.
Open je ODBC. Deze vind je in je controlepaneel onder XP,... en onder je Administrative tools bij Windows 2003.
Je krijgt nu een venster te zien met enkele tabbladen. Kies voor het tabblad "System DSN".
Klik op de knop "Add". Kies voor "Microsoft Acces Driver (.mdb)". Bij "Data Source Name" geven we de verbinding een handige naam, bv. "sitemastersIQ". Een beschrijving vul je zelf maar in om achteraf verschillende verbindingen uit elkaar te kunnen houden.
Klik dan op de "select"-knop om je .mdb-database te selecteren. Klik op OK en sluit de vensters.
Nu kunnen we ook terug gegevens opvragen. De code hiervoor is exact dezelfde, behalve de veriabele connectie die verandert, en de variabele database valt weg.
1<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> 2<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"> 3<html> 4<head> 5<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 6<title>IQ Tabel</title> 7</head> 8 9<body>10<%
11DIM connectie
12' Declaratie1314connectie ="DSN=sitemastersIQ"15' Op deze manier maken we de connectie via OLEDB.16' Er is ook nog de andere manier, ODBC, maar die17' is trager en dus af te raden. Die haal ik hier dus18' niet aan.19DIM verbinding
20SET verbinding = Server.CreateObject("ADODB.Connection")
21' We maken het object voor de verbinding aan22verbinding.open connectie
23' Het openen van de verbinding, met als tweede parameter 'connectie'24' Nu de verbinding gemaakt is moeten we een tabelletje maken en dmv een query25' gegevens ophalen26%>27<table cellpadding="4" cellspacing="0" border="0" style="border: 1px solid #000000;">28<tr>29<td style="background-color:#CCCCCC; border-bottom: 3px double #000000; ">Naam:</td>30<td style="background-color:#CCCCCC; border-bottom: 3px double #000000; ">IQ:</td>31</tr>32<%
33' Onze query ziet er simpelweg als volgt uit:34DIM query
35' Declaratie36 query ="SELECT * FROM iqtabel ORDER BY iq DESC"37' Zo halen we alle rijen op, gesorteerd op iq van hoog naar laag38DIM rij
39' Declaratie40SET rij = verbinding.Execute(query)
41' Uitvoeren van de query, en dat in de variabele "rij" duwen42WHILENOT rij.EOF
43' Rijtjes afdrukken met een WHILE-lus44 %>45<tr>46<td><%=rij("naam")%></td>47<td><%=rij("iq")%></td>48</tr>49<%
50 rij.MoveNext
51' Volgende rij52WEND53' Einde WHILE54 %>55</table>56<%
57verbinding.close
58SET verbinding =nothing59'Verbinding sluiten en wissen60%>61</body>62</html>
Wat gebeurt er nu: het script haalt gegevens uit de connectie die je hebt ingesteld uit de server. De output hiervan is exact hetzelfde: een lege tabel.
3. Ellende achteraf
Er kunnen bepaalde foutmeldingen optreden. Een van de mogelijk voorkomende foutmeldingen:
Permission denied Dit is simpel: de rechten zijn incorrect.
Voor Windows 2003: Rechtsklikken op db -> Properties -> Security -> Zorg dat de account "Internet Guest Account" voldoende rechten heeft (Read & Modify)
Als je gehost neem je hiervoor meer contact op met je host.
Unspecified error Rebooten van de server kan dit soms oplossen. Probeer ook even de eerste methode indien dit mogelijk is (Rechtstreekse verbinding).
4. Meer acties
Natuurlijk kan je nog veel meer dan enkel uitlezen. Nu gebruiken we je_verbindingsobject.execute(query)
in samenwerking met een WHILE-lus, maar dit is slechts een voorbeeld. Het volgende is een ander voorbeeld:
Op deze manier kan je de het IQ van 1 persoon opvragen door middel van je_pagina.asp?naam=<persoon>.
4. Belangerijk
Een van de belangerijkste dingen bij het ontwikkelen van grote database-applicaties is het sluiten van je verbinding. Dit zie je ook in bovenstaande codefragmenten, maar ik wil er toch nog even de nadruk op leggen:
Ziezo, mijn uitleg zit erop. Als je nog vragen hebt kan je ze best stellen op het forum, daar ik nog niet zo lang met ASP bezig ben. Op google vind je ook altijd wel informatie over eventueel voorkomende problemen.