ASP: Records tonen uit een Database - ΩJr. Software Articles and Products

This information lives on a web page hosted at the following web address: 'https://omegajunior.globat.com/code/'.

A.E.Veltstra
13 December 2000
Geheel herzien 12 juli 2012

Stel je voor dat je een database hebt gebouwd. Daarin heb je een tabel opgenomen met artikelen. Jouw webpagina moet die artikelen tonen. Dan heb je de keus:
- toon je alle artikelen uit de tabel bij elkaar in 1 pagina,
- of wil je een beperkt aantal per pagina,
- of wil je een opsommig van artikelen, met elk artikel op een aparte pagina?

Dit zijn ontwerpvragen die je beantwoord moet hebben voordat je de pagina bouwt. Dit artikel behandelt alleen de derde methode. We maken een programma dat een index van artikelen toont. De bezoeker maakt een keuze, waarna alleen dat artikel verschijnt.

Dit artikel gaat ervan uit dat je een ASP webserver hebt, of weet hoe de webserver ge-installeerd moet worden. Meer informatie kun je vinden bij www.4guysfromrolla.com.


Opzet van de tabel
Deze tabeldefinitie is gebaseerd op een tabel in MS Access 2000. Dat is niet de beste keus voor een webapplicatie, maar het werkt wel.
(De veldnaam bevat alleen tekst; geen voorlooptekens die door de html-lijstopmaak zijn toegevoegd, en geen dubbele punt.)



Voor de database geldt, dat alle tekst- en memovelden mogen leeg zijn. Geen enkel veld is verplicht. Als je een webpagina bouwt waar gegevens ingevoerd mogen worden, zul je op die pagina moeten controleren of de gegevens ingevoerd worden.


De webpagina "artikelen.asp"

<html><head><title>Artikelen</title></head>
<body>
<h1>Artikelen</h1>
<%
' Dit is het ASP-codeblok. De invulling volgt nog.
%>
<p><a title="Ververs index" href="artikelen.asp">Ververs het overzicht</a></p>
</body>
</html>


Zoals je ziet, is het html-gedeelte redelijk simpel. Dit houdt in, dat de ASP-code ingewikkeld gaat worden.


De ASP-code

De code moet drie dingen doen:


Het ophalen van de gegevens wordt gesplitst: normaalgesproken wordt er alleen een artikelindex opgehaald. Ik hergebruik de ophaalfunctie: als er uit de index een artikel is gekozen, wordt dat artikel opgehaald. Deze opzet maakt de code iets moeilijker, maar bespaart een extra webpagina.

Enkele opmerkingen over het ASP-codeblok.



Verbinding maken met de database

<%
On Error Resume Next 'ASP kent geen foutafhandeling zoals Visual Basic

Dim adoCon 'gaat de verbinding maken en vasthouden
Dim strCon 'zal de verbindingsinstellingen (connectionstring) krijgen

strCon = "driver={Microsoft Access Driver (*.mdb)};dbq=MijnPadNaarMijnDatabase;uid=;pwd="
'Voor andere RDBMS-en heb je ook een andere connectionstring nodig. Deze is voor MS Access.
'MijnPadNaarMijnDatabase moet worden vervangen door jouw pad naar jouw database.
'Het pad moet door de webserver gevonden worden; het mag geen webadres zijn.
'Vergeet niet dat je ook de naam van de database moet ingeven.
'Ga er even van uit dat er geen gebruikersbeveiliging is ingesteld in de database,
'zodat uid (User Identification) en pwd (Password) leeg gelaten worden.

Set adoCon = Server.CreateObject("ADODB.Connection")
If adoCon Is Nothing Then
'Er is geen verbindingsobject (ADODB is niet goed ge-installeerd)
Response.Write("<p>Geen verbinding met de database.</p>")
Response.Write("<p>Neem bij herhaling contact op met de webmaster.</p>")
Else
adoCon.Open (strCon)
If Err.Number = 0 Then
'Geen fouten: de verbinding is gelukt.
'Omdat de variabele adoCon globaal is, is de databaseverbinding beschikbaar in de hele webpagina.
Else
'Fouten bij het openen van de databaseverbinding.
Response.Write("<p>Fouten tijdens het verbinden met de database.</p>")
Response.Write("<p>Neem bij herhaling contact op met de webmaster.</p>")
End If
End If

%>



Ophalen van de gegevens

<%

On Error Resume Next

Dim lngArtNr 'Het eventueel gekozen artikelnummer.
Dim strSQL 'een SQL-opdracht (nodig hebt om de gegevens te selecteren)
Dim adoRst 'Gaat de gegevens vasthouden.
Dim blnErZijnArtikelen 'Vertelt of er wel of geen gegevens zijn.

blnErZijnArtikelen = False

'We moeten controleren of er een artikel is gekozen.
'De artikelindex die zometeen opgebouwd wordt, roept deze pagina opnieuw aan,
'en geeft een artikelnummer aan de querystring (zichtbaar in de adresbalk) mee.
'Die querystring wordt nu uitgelezen.

lngArtNr = (-1) 'waarde ingeven die niet mogelijk is voor de autoteller-reeks
lngArtNr = CLng(Request.QueryString("nr"))
'Het gekozen artikel, indien opgegeven, is een string,
'en moet omgezet worden naar een lange integer
If lngArtNr > (-1) Then 'haal het gekozen artikel op
strSQL = "SELECT * FROM tblArtikel WHERE AIndex = " & lngArtNr
Else 'haal een lijst op
'Je kunt ook de bezoeker een sorteermethode op laten geven.
strSQL = "SELECT AIndex, ATitel, AAuteur, ADatum, ACategorie FROM tblArtikel ORDER BY ADatum"
End If

Set adoRst = Server.CreateObject("ADODB.Recordset")
If adoRst Is Nothing Then
'Er is geen gegevensobject (ADODB is niet goed ge-installeerd)
Response.Write("<p>Er kunnen geen artikelen worden opgehaald uit de database.</p>")
Response.Write("<p>Neem bij herhaling contact op met de webmaster.</p>")
Else
'Open het gegevensobject en vul het met gegevens
'standaard = RecordSet.Open Source, ActiveConnection, CursorType, LockType, Options
'CursorType(1) = Static (default = 0 = ForwardOnly)
'Options(1) = (Source = Text) (default = 8 = (Source = Unknown))
adoRst.Open strSQL, adoCon, 0, 1
'controleer of er gegevens in het object zitten
If (adoRst.BOF = False) Or (adoRst.EOF = False) Then 'Er zijn gegevens
blnErZijnArtikelen = True
Else 'Er zijn geen gegevens
blnErZijnArtikelen = False
Response.Write("<p>Er zijn geen gegevens gevonden.</p>")
Response.Write("<p>Neem bij herhaling contact op met de webmaster.</p>")
End If
End If

%>



De opgehaalde gegevens in de webpagina plaatsen
Omdat we in een codeblok werken, gebruiken we de opdracht Response.Write() om gegevens in html op te zetten. Dat kan best lastig zijn i.v.m. aanhalingstekens.

<%

On Error Resume Next

'Je moet twee dingen bepalen:
'Werd er een artikel aangevraagd, en zijn er gegevens beschikbaar?
'De laatste is het belangrijkst. Als er geen gegevens zijn, hoef je niets op de pagina te plaatsen.
If blnErZijnArtikelen = True Then
If lngArtNr > (-1) Then 'Artikel plaatsen.

Response.Write("<h2>" & adoRst.Fields("ATitel") & "</h2>")
Response.Write("<p>" & adoRst.Fields("AAuteur") & "</p>")
Response.Write("<p>" & adoRst.Fields("ACategorie") & "</p>")
Response.Write("<hr><p>" & adoRst.Fields("AArtikel") & "</p><hr>")
Response.Write("<p>" & adoRst.Fields("ADatum") & "</p>")

Else 'Overzicht plaatsen.

Response.Write("<table>")
Response.Write("<tr><td>Titel</td><td>Auteur</td><td>Datum</td></tr>")
adoRst.MoveFirst
Do While adoRst.EOF = False
Response.Write("<tr><td><a title=" & Chr(34) & "Lees dit artikel" & Chr(34) & " href=" & Chr(34) & "artikelen.asp?nr=" & adoRst.Fields("AIndex") & Chr(34) & ">" & adoRst.Fields("ATitel") & "</a></td><td>" & adoRst.Fields("AAuteur") & "</td><td>" & adoRst.Fields("ADatum") & "</td></tr>")
Loop
Response.Write("</table>")
End If
End If

%>


Nu ben je in staat om gegevens op te halen uit een database, en deze te presenteren in een webpagina. Vragen? Neem contact op!

Need problem solving?

Talk to me. Let's meet for coffee or over lunch. Mail me at “omegajunior at protonmail dot com”.