Verzoeknummer voor Wannes: héél in de snelte een adresboek in een dynamische webpagina met een Accessdatabankje erachter. Ik ga ervaan uit dat het allemaal niet te complex moet zijn, dat de server een standaard-Windowsmachien is, en dat het beheer in Access zelf gebeurt.
Maak een nieuwe database in Access. De database zal maar een paar tabellen bevatten:
- tblPostcodes: tabel met postcodes en gemeenten (die ik van alhier gaan halen ben, alleen die van Gent, ha!)
- postcode_id: autonumber-veld, unieke code
- postcode_code: eum, code
- postcode_gemeente: naam van de gemeente
- tblPersonen
- pers_id: autonumber-veld, unieke code om de persoon mee te identificeren
- pers_voornaam: tekstveld
- pers_familienaam: tekstveld
- pers_straat: tekstveld, bevat straat en nummer en wat er nog nodig zou zijn van het adres (ik moet zeggen dat ik maar zeer zelden een noodzaak vind om straat en nummer afzonderlijk te zetten, maar voel u vrij om het te doen als het nodig zou zijn)
- pers_postcode_id: nummer dat verwijst naar de tabel met de Belgische postcodes. Voel u vrij om hier een tekstveld van te maken met gewoon “postcode / gemeente” in, of om dàt in het adresveld te steken en hier een land-code van te maken, maar goed.
Omdat ik het toch niet kan laten om het een béétje moeilijk te maken: contactmogelijkheden. Een mens die het allemaal zeer naief bekijkt, zou de tblPersonen-tabel bijvoorbeeld aanvullen op deze wijze:
- tblPersonen, vervolg
- pers_telefoon
- pers_fax
- pers_gsm
- pers_email
- pers_website
…om dat in de miserie te zitten als de persoon blijkt (zoals ik) meer dan één telefonnummer te hebben, of meer dan één e-mailadres of meer dan één website. Diezelfde mens zou dan misschien gaan doen van:
- tblPersonen, vervolg
twee- pers_telefoon2
- pers_email2
- pers_email3
- pers_website2
- pers_website3
…maar het mag duidelijk zijn dat dat een straatje zonder einde is. Er zijn gelukkig een aantal verschillende mogelijke oplossingen, waarvan dit er één is:
- tblContact: een tabel met alle mogelijke contactmiddelen erin, zoals daar zouden kunnen zijn: telefoon, fax, e-mail, website, msn, deaftel, telex, etc. etc.
- contact_id
- contact_naam
- tblPersoon_Contact: een tabel waarin alle telefoonnummer, e-mails etc. zitten, telkens met de code van de persoon van wie het ding is
- pc_id: niet echt nodig, maar alla
- pc_pers_id: unieke code van de persoon
- pc_contact_id: unieke code van het soort contactmiddel
- pc_data: het eigenlijke telefoonnummer of e-mailadres, msn ID, etc.
Al die dingen aangemaakt in Access, en dan naar het Relationship-venster gegaan, en lijntjes trekken:
Een beheerformuliertje in Access: niets zo gemakkelijk. Create form in design view vind ik hier het gemakkelijkst. Als je bij de form properties (dat kleine vierkantje linksboven, daar rechtermuisknop > properties doen) de Record Source op tblPersonen zet, kun je een field list tevoorschijn toveren:
Versleep voornaam, familienaam en straat en postcode naar het formulier, en dat geef dan dit:
Volgende stap: ervoor zorgen dat die ostcode een dropdowntje wordt in plaats van een invulveld voor een getal. Easy peasy: rechterklik op het postcodeveld, convert to > combobox, weer rechtermuisklik, properties, bij Data de Row Source op tblPostcodes zetten, Column Count op 3 (zodat ID en code en naam te zien zijn), en width op “0;.8cm” zetten zodat het id niet meer te zien is en de postcode wat minder ruimte dan standaard inneemt. Resultaat:
(natuurlijk zou het ook kunnen om in de plaats daarvan de Row Source te zetten op SELECT tblPostcodes.postcode_id, postcode_code & ' ' & postcode_gemeente AS gemeente FROM tblPostcodes order by postcode_gemeente;
, dan moeten er maar twee kolommen zijn en kan Width op 0cm staan, simpeler dan trial and error zoeken naar de breedte voor de postcode) (in fact, ik ga het zo doen:)
En dan nu, voor de piece de résistance: een subformulier met de contactmogelijkheden voor elke persoon. Als je op de subform-knop duwt (), krijg je een wizard te doorlopen. De defaultkeuzes zouden ervoor moeten zorgen dat alles in orde komt, maar als dat niet het geval is:
- Record source voor het subformulier is
SELECT * FROM tblContact INNER JOIN tblPersoon_Contact ON tblContact.contact_id=tblPersoon_Contact.pc_contact_id;
- link master field is
pers_id
, link child field ispc_pers_id
Verwijder alle velden behalve pc_contact_id en pc_data, en converteer pcontacid naar een combobox. Resultaat zou iets in deze zin moeten zijn:
Enfin, zou moeten.
Download adres.zip mocht het niet zijn wat het moet zijn 🙂
Next: het ding op een website pleuren. De database ergens zetten en er een ODBC-connectie naar leggen (ik heb ze, heel creatief, “adres” genoemd). Een asp-pagina aanmaken (opnieuw heel erg creatief, “default.asp” genoemd), en de connectie opensmijten, bijvoorbeeld (want er zijn weer stapels verschillende wijzen) op deze manier:
set cn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")
cn.open "DATA SOURCE=adres;"
cn
is de connectie, rs
is, erm, de recordset, en qry
is een variabele waar later een query string in komt.
…next, data in de recordset krijgen:
qry="select * from tblPersonen order by pers_familienaam"
rs.open qry,cn
en nu dat het in rs
helemaal vol data zit, die data er weer uit halen.
do while not rs.EOF ' zolang er gerief in zit
response.write rs.fields("pers_voornaam")&" <a href=""persoon.asp?p="&rs.fields("pers_id")&""">"&rs.fields("pers_familienaam")&"</a><br />"
rs.MoveNext
loop
…en eens dat alles getoond is: proper de recordset en de connectie weer toedoen:
rs.close
cn.close
Dat geeft een lijst van alle personen in de database, met een link op hun achternaam naar een nieuwe pagina, waar het id van die persoon wordt naar meegegeven in de url. Iets als persoon.asp?p=3
.
Ja, dat zou ook allemaal properder kunnen en zo, maar bon. In persoon.asp zou je dan precies etzelfde kunnen doen, maar dan met alle data uit de database en niet alleen de naam. Dus precies hetzelfde maar met deze query in de plaats van de vorige:
qry="select * from tblPersonen, tblPostcodes where tblPersonen.pers_postcode_id=tblPostcodes.postcode_id and tblPersonen.pers_id="&request.querystring("p")
Die worden getoond:
do while not rs.eof
response.write "<p><strong>"&rs.fields("pers_voornaam")&" "&rs.fields("pers_familienaam")&"</strong><br />"
response.write rs.fields("pers_straat")&"<br />"
response.write rs.fields("postcode_code")&" "&rs.fields("postcode_gemeente")&"</p>"
rs.movenext
loop
…en dan worden de contactmiddelen van die persoon opgesnord en getoond, bijvoorbeeld op deze manier:
qry="select * from tblContact, tblPersoon_contact where tblPersoon_contact.pc_contact_id=tblContact.contact_id and tblPersoon_contact.pc_pers_id="&request.querystring("p")
rs.open qry, cnresponse.write "<p>"
do while not rs.eof
response.write "<em>"&rs.fields("contact_naam")&"</em> "&rs.fields("pc_data")&"<br />"
rs.movenext
loop
response.write "</p>"
Download de asp-files. Geen idee of dit is wat Wannes in gedachten had, maar moeilijker dan dat is het dus niet om een dynamische webpagina te maken.
Reacties
5 reacties op “Een dynamische website”
Wat een geweldig begin van de dag!
Ik geloof dat ik hier wel een tijdje zoet mee ben!
I’ll keep you posted!
àlle postcodes vind je gratis, voor niets bij… de… post (website).
test
[…] Verse koffie Idris, de nieuwe werkkracht op het bedrijf waar ik stage doe (SPRA) was vanmorgen weer eerst bij de deur. En binnen. En aan het koffiemachien. Van gemak gesproken!En lekkere koffie, ‘t zal wel zijn: héérlijke koffie!Op “…en nu even ernstig”, het weblog van de standaard stond vandaag iets over vakantielieven. De nederlandse touroperator GoGotours heeft een dumpsite gemaakt: dumpjeschatje.nl.Allemaal tips en voorbeeld brieven als je je lief wilt dumpen…Of dat nu echt wel zo’n goed idee is… Gelukkig hebben wij al jaren Poeperkesdag!Vandaag moet ik trouwens langs de relatietherapeut. Accessrelatietherapeut wel te verstaan. Uitleg, privéles, duidelijkheid over Access. Want alle moeite van Michel Vuijlsteke ten spijt, ik snap er nog steeds niets van. Vandaag krijg ik dus (again) de basis en een goed boek. En een goed boek: eentje dat handelt over asp. Of iets dergelijks. Dan kan ik me daar eens volledig achterzetten. Leren programeren… (eerst fatsoenlijk met tien vingers leren typen…)Mijn andere boek (Jakob Nielsen – designing webusability) is bijna uit. Zeer interessant. En praktisch. En mooi van groene kleur op de kaft. Groen – blauw rules. En rood.En nu, hopla, aan het werk! […]
[…] Een dynamische website — Michel Vuijlsteke's Weblog Een dynamische website. Gepost op woensdag 16 februari 2005 om 22:38 in (geen …. moeilijker dan dat is het dus niet om een dynamische webpagina te maken. … https://blog.zog.org/…/een_dynamische_.html – 29k […]