| PCMenu | Access Tips en trucs | Programmavoorbeelden Access |
| Query | Formulier | Rapport |
| Macro, module en programmacode | Tabellen en databaseontwerp in AdresMenu | |
| Hebt u inhoudelijke vragen over Access die u niet in deze teksten beantwoord ziet, stel deze dan bij voorkeur bij het forum http://office.webforums.nl/forum/, u krijgt meestal dezelfde dag nog een helder antwoord van een van de andere deelnemers van het forum. | ||
In deze tekst:
Zie ook op andere sites:
|
|
Tip: klik op een afbeelding om deze te vergroten.
In deze tekst wordt het volgende begrip besproken:
Tabellen vormen de basis van elke database en bevatten de gegevens. Een tabel bevat een aantal records. Elk record heeft een aantal velden. In de tabeldefinitie bepaalt u welke eigenschappen de velden van de tabel hebben, bijvoorbeeld: tekst, datum of numeriek, maximale lengte van de tekst, wel of niet unieke waarden voor dit veld enzovoort. Per tabel kunt u een oneindig aantal records maken. Tussen tabellen kunt u relaties leggen, waarmee u de inhoud van de tabellen kunt bewaken. In een relatie kunt u bijvoorbeeld vastleggen dat het veld Artikel in de tabel tblBestelling alleen uit de tabel tblArtikel gekozen mag worden.
|
Het ontwerp van de tabellen en het bepalen van de relaties ertussen is het belangrijkste onderdeel van het maken van de database. De extra tijd die u besteed aan een goed ontwerp verdient u later dik en breed terug. Een belangrijk begrip bij het databaseontwerp is normalisatie. Hiermee wordt bedoeld dat u de tabellen in uw database zo ontwerpt, dat elk gegeven slechts in één tabel wordt bijgehouden en niet onnodig ook in andere tabellen voorkomt (redundantie geheten). Met normalisatie voorkomt u inconsistentie: ongelijkheid in gegevens. Verderop op deze pagina en op de site http://www.sip.be/cursus/access/inhoud.htm >> Relaties >> Normalisatie leest u meer over normalisatie. Elders op deze site wordt ook het databaseontwerp van Adresmenu uitgebreid besproken. |
| Probeer uw programma zo op te zetten dat u delen hiervan kunt hergebruiken in andere programma's. U kunt bijvoorbeeld een extra tabel tblInformatie maken (een tabel waarin u slechts één record opneemt) waarin u de gegevens van het programma zet, zoals naam, auteur, contactadres enzovoort. Op uw formulieren kunt u naar deze tabel verwijzen. Als u een ander programma maakt, dan kunt u mogelijk deze formulieren ook in dit andere programma gebruiken en hoeft u alleen het record in de tabel tblInformatie te wijzigen met de gegevens van het nieuwe programma. | |
| Beter goed gejat dan slecht zelf gemaakt. Bij programmeren gaat dit volledig op. U kunt vaak delen van programmacode uit andere programma's overnemen voor uw eigen programma. Het is wel netjes als u de bron van de overgenomen programmacode ergens vermeldt, in een commentaarregel in de programmacode zelf en/of in een opmerkingen-veld in uw programmainformatie, bijvoorbeeld in een tabel tblInformatie. |
| Als uw programma door meerdere mensen gelijktijdig gebruikt gaat worden, dan kunt u het beste het programma splitsen in een Gegevensbestand en een Programmabestand. Zie de tekst Access voor gevorderden. U kunt dit op elk moment doen, voor de ontwikkeling van het programma is het splitsen niet nodig. |
| Gebruik bij voorkeur duidelijke namen en vermijd spaties, streepjes en andere leestekens in de namen van velden en tabellen. U kunt wel de _ gebruiken, in plaats van een spatie. Bij het schrijven van programmacode ondervindt u veel voordelen van deze naamgeving. | |
| Namen van tabellen, query's en velden kunt u vooraf laten gaan met een prefix. Bijvoorbeeld txt voor tekstvelden, lng voor velden met een numerieke waarde van het type Lange integer, tbl voor tabellen enzovoort. Dit wordt de Hongaarse notatie genoemd. Een consequente naamgeving maakt direct duidelijk wat voor een element het is. | |
| Het is sterk aan te raden om de naam van het veld op het formulier niet gelijk te maken aan de naam van de bron van het veld.
Voorbeeld: als u op een formulier een veld hebt dat als bron het veld ID_Naam heeft, geeft u dit veld de naam txtID_Naam. In functies die verwijzen naar dit formulierveld is het dan duidelijk dat u naar het veld verwijst wat op dat moment op het actieve formulier getoond wordt en niet naar de waarden van het veld van de onderliggende tabel of query van dat formulier. Dit is met name van belang omdat u vaak zult verwijzen naar een veld op een formulier dat nog niet opgeslagen is. Het onderliggende veld in de tabel of query is dan nog niet bijgewerkt en is dus anders dan het zichtbare veld op het formulier. |
| U kunt het uzelf makkelijker maken door volop gebruik te maken van de helpfuncties van Access. U kunt veel helpfuncties onder de rechtermuisknop vinden. Of u kunt een Wizard of Opbouwfunctie gebruiken. De F1-toets geeft u toegang tot de uitgebreide helpteksten van Access. |
| Bij een aantal vensters van invulformulieren is in de Statusbalk (de balk onder aan het scherm) informatie te lezen over de in te voeren gegevens. Als de muiscursor op een tekstveld staat, dan zal Access de omschrijving van het tekstveld zoals die in de tabeldefinitie is gedefinieerd, weergeven. |
| Begin eerst met het aanmaken van de tabellen en maak nog even geen formulieren. Probeer goed in te schatten welke tabellen en velden binnen de tabel u nodig hebt en hoe u deze wilt definiëren. |
Voorbeeld: Voor een tabel met adressen adressen kunt u bijvoorbeeld denken aan de volgende velden: ID_Naam, Achternaam, Voornaam, Voorletters, Tussenvoegsels, Titel, Geslacht, Ter_attentie_van, Adres, Postcode, Plaats, Land, Telefoon_overdag, Telefoon_avond, Fax, Mobiel, Email_adres, Homepage, Opmerking enzovoort.
Het kan soms handig zijn om een Adres-veld te splitsen in een Straat en een Huisnummer, maar u kunt zelf beoordelen of u dit nodig vindt.
| Voor de meeste tabellen is het aan te raden dat u ook een ID-veld (identificatie-veld) opneemt van bijvoorbeeld het type Autonummering. Als een tabel al een uniek veld heeft, bijvoorbeeld Artikelnummer, dan kun u beter dit veld als identificatieveld gebruiken. Het unieke veld is het Sleutelveld van de tabel. |
| Zorg er voor dat elke tabel unieke gegevens heeft. Als een groepje velden meerdere keren in een tabel dezelfde inhoud heeft, kijk dan of u deze velden niet in een andere tabel kunt plaatsen. Dit proces van het splitsen van tabellen heet normaliseren. De afgesplitste tabel heet een opzoektabel. Met het normaliseren van uw database voorkomt u inconsistente: het verschijnsel dat u op twee verschillende plekken in uw database verschillende gegevens hebt staan, bijvoorbeeld op een plek de achternaam Keijzer en op een andere plek voor dezelfde persoon de achternaam Keyzer. Access kan u helpen met het normaliseren van de tabellen: klik op Extra >> Analyseren >> Tabel. |
Voorbeeld: In een tabel tblBestelling neemt u niet alle velden van de besteller (naam, adres enz.) en alle velden van het artikel (artikelnaam, bestelnummer, prijs enz.) op, maar alleen het sleutelveld van de tabel tblNaam en het sleutelveld van de tabel tblArtikel. In de tabellen tblNaam en tblArtikel hebt u immers al de andere gegevens van de klant en van het artikel opgenomen. De twee sleutelvelden uit de tabellen tblNaam en tblArtikel zijn in de tabel tblBestelling de 'vreemde' sleutels geworden.
| Leg tussen de bij elkaar horende tabellen (tabellen en opzoektabellen) een Relatie (zie Extra >> Relatie) waarbij u de referentiële integriteit aanzet. Met referentiële integriteit dwingt u de samenhang tussen de tabellen af. Een relatie legt u altijd vanaf het sleutelveld van de opzoektabel naar een veld van de hoofdtabel. In de hoofdtabel heeft dit veld dan een 'vreemde sleutel'. De veldtypes van de beide velden moet gelijk zijn, bijvoorbeeld een string (tekst) of een numeriek veld van het type Lange integer. Een Autonummering veld is altijd van het type Lange integer. |
| Als u tussen twee tabellen in beide tabellen meerdere records met elkaar wilt verbinden (dit heet een veel-op-veel relatie), dan hebt u een tussentabel nodig. In de tussentabel beschrijft elk record de relatie tussen de twee tabellen. Leg ook hier de referentiële integriteit vast tussen de tabellen. |
Voorbeelden:
Uitleenadministratie van een bibliotheek:
De belangrijkste relatie is: tblAbonnee -> tblUitleen (Abonneenummer, ID_Boek, Datum_tot) <- tblBoek
De tabellen tblAbonnee en tblBoek zijn de hoofdtabellen.
De tabel tblUitleen is een tussentabel., die de relatie vastlegt tussen elk uitgeleend boek en de lener / abonnee.
De tabellen tblType_abonnee, tblMedewerker en tblPlaats zijn opzoektabellen. De tabel tblMedewerker komt twee keer voor in het venster Relaties, omdat er bij de uitleen twee medewerkers betrokken zijn: een medewerker die het boek uitleent, en een medewerker die het boek later weer inneemt.
Tussen alle tabellen is een relatie gelegd. Bij alle relaties is de referentiële integriteit aangezet, zodat u alleen een abonnee uit het abonneebestand kunt kiezen en alleen een boek uit het boekenbestand. Uitzondering: de relatie tussen Plaats en Abonnee wordt niet beperkt door een referentiële integriteit, zodat u ook een plaats kunt invullen die niet in de lijst voorkomt, bijvoorbeeld een plaats in het buitenland.(klik op de afbeelding om deze te vergroten)
Besteladministratie:
De belangrijkste tabellen en relaties zijn:
tblKlant -> tblOrderregels (ID_Klant, ID_Artikel, ID_Order, Aantal) <- tblArtikelIn een tussentabel kunt u een nieuw ID-veld maken als sleutelveld, of u kunt de twee vreemde sleutels samen als sleutel van de tussentabel instellen. In dit laatste geval is de relatie tussen elk record van de ene hoofdtabel en elk record van de andere hoofdtabel uniek. Voorbeeld:
- Als in de tussentabel tblUitleen de velden Abonneenummer en ID_Boek samen de sleutel van de tussentabel vormen, dan kunt u boek 123 slechts één keer aan abonnee met abonneenummer 345 uitlenen.
- Als de tussentabel tblUitleen een eigen uniek veld ID_Uitleen heeft, dan kunt u elk boek meerdere keren aan eenzelfde abonnee uitlenen.
U kunt de weergave in het relatievenster naar eigen wens aanpassen. U kunt tabellen verplaatsen, vergroten of verkleinen enz. U kunt ook tabellen weghalen: u verwijdert dan niet de tabel of de relaties met deze tabel, maar u zorgt er dan alleen voor dat u de tabel niet meer in het relatievenster ziet. Met de rechter muisknop en dan Alle relaties weergeven zet u de tabel(len) en de relaties weer terug.
In Access 2000 en hoger kunt u ook het relatievenster als een rapport opslaan in uw database en dan afdrukken. Zie Access voor gevorderden.
| Voor gevorderden: U kunt veel werk besparen bij het maken van formulieren wanneer u al in de tabeldefinitie van velden met opzoeklijsten alvast de opzoeklijst definieert. U kunt de opzoeklijst definiëren bij de Eigenschappen op het tabblad Opzoeken. Kies bij Weergave van het besturingselement voor Keuzelijst met invoervak en vul bij Rijbron de betreffende opzoeklijst in. U kunt de opzoeklijst ook aanmaken met een opbouwquerie, klik op de knop [...] achter het veld Rijbron. U kunt dezelfde techniek gebruiken die u bij Formulieren bij Keuzelijsten met invoervakken gebruikt. Als u bij de tabellen de Opzoeklijst al hebt gedefinieerd, dan wordt deze automatisch overgenomen in formulieren waarin u deze tabelvelden opneemt. U hoeft dus niet meer voor elk formulier de keuzelijst apart op te maken. |
Voorbeeld van het instellen van een opzoekveld in de tabel:
| Tip: laat uw werk een dagje liggen en kijk er de volgende dag nog eens naar, voordat u verder gaat. Een goede basis is niet de helft, maar bij Access-programma's 90% van het werk... |
| Zie Access query's. |
| Zie ook de tekst Tabellen in AdresMenu om te zien hoe de tabellen in een programma als AdresMenu zijn opgebouwd. |