login  Naam:   Wachtwoord: 
Registreer je!
 Tutorials

Tutorials > ASP


Gegevens:
Geschreven door:
Maarten
Moeilijkheidsgraad:
Normaal
Hits:
10071
Punten:
Aantal punten:
 (4)
Aantal stemmen:
8
Stem:
Niet ingelogd
Nota's:
 Lees de nota's (0)
 

Tutorial:

ASP en Acces databases

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 <%
11 DIM connectie, database
12 'Declaratie
13 
14 database = Server.mappath("sitemasters.mdb")
15 ' Met de functie mappath()
16 ' verkrijgen we het volledige pad van de database
17 connectie = "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 die
20 ' is trager en dus af te raden. Die haal ik hier dus
21 ' niet aan.
22 DIM verbinding
23 SET verbinding = Server.CreateObject("ADODB.Connection")
24 ' We maken het object voor de verbinding aan
25 verbinding.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 query
28 ' gegevens ophalen
29 %>
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:
37     DIM query
38     ' Declaratie
39     query = "SELECT * FROM iqtabel ORDER BY iq DESC"
40     ' Zo halen we alle rijen op, gesorteerd op iq van hoog naar laag
41     DIM rij
42     ' Declaratie
43     SET rij = verbinding.Execute(query)
44     ' Uitvoeren van de query, en dat in de variabele "rij" duwen
45     WHILE NOT rij.EOF
46     ' Rijtjes afdrukken met een WHILE-lus
47     %>
48     <tr>
49         <td><%=rij("naam")%></td>
50         <td><%=rij("iq")%></td>
51     </tr>
52     <%
53     rij.MoveNext
54     ' Volgende rij
55     WEND
56     ' Einde WHILE
57     %>
58 </table>
59 <%
60 verbinding.close
61 SET verbinding = nothing
62 'Verbinding sluiten en wissen
63 %>
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 <%
11 DIM connectie
12 ' Declaratie
13 
14 connectie = "DSN=sitemastersIQ"
15 ' Op deze manier maken we de connectie via OLEDB.
16 ' Er is ook nog de andere manier, ODBC, maar die
17 ' is trager en dus af te raden. Die haal ik hier dus
18 ' niet aan.
19 DIM verbinding
20 SET verbinding = Server.CreateObject("ADODB.Connection")
21 ' We maken het object voor de verbinding aan
22 verbinding.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 query
25 ' gegevens ophalen
26 %>
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:
34     DIM query
35     ' Declaratie
36     query = "SELECT * FROM iqtabel ORDER BY iq DESC"
37     ' Zo halen we alle rijen op, gesorteerd op iq van hoog naar laag
38     DIM rij
39     ' Declaratie
40     SET rij = verbinding.Execute(query)
41     ' Uitvoeren van de query, en dat in de variabele "rij" duwen
42     WHILE NOT rij.EOF
43     ' Rijtjes afdrukken met een WHILE-lus
44     %>
45     <tr>
46         <td><%=rij("naam")%></td>
47         <td><%=rij("iq")%></td>
48     </tr>
49     <%
50     rij.MoveNext
51     ' Volgende rij
52     WEND
53     ' Einde WHILE
54     %>
55 </table>
56 <%
57 verbinding.close
58 SET verbinding = nothing
59 'Verbinding sluiten en wissen
60 %>
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:

 1 <%
 2   DIM connectie
 3   connectie = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & Server.MapPath("sitemasters.mdb") & ";"
 4   
 5   DIM ObjectVerbinding,query
 6   SET ObjectVerbinding = Server.CreateObject("ADODB.Connection")
 7   ObjectVerbinding.Open connectie
 8   query = "SELECT iq FROM iqtabel WHERE naam = '" & Request.QueryString("naam") & "'"
 9   SET detail = ObjectVerbinding.Execute(query)
10   Response.Write("<h1>IQ " & Request.QueryString("naam") & ": " & detail(0) & "</h1>")
11   
12   ObjectVerbinding.close
13   SET ObjectVerbinding = nothing
14 %>

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:

1 <%
2   je_verbindingsobject.close
3   SET je_verbindingsobject = nothing
4 %>

 


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.



« Vorige tutorial : Formulieren (gegevens verzenden en opvragen)

© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.02s