Inleiding - evert kok

advertisement
Inleiding
Is dit boek het juiste boek voor jou?
Je hebt al enige ervaring met het programmeren in Visual Basic en wilt nu leren
programmeren met databases? Dan is dit boek precies wat je zoekt. In dit boek leggen we
stap voor stap uit hoe je interfaces voor databases maakt, de interfaces verbindt met de
databases en bewerkingen uitvoert op de gegevens in de databases. We doen dit aan de
hand van een aantal programma’s die je in de loop van dit boek maakt. Zo maak je zowel
Windows programma’s als webpagina’s die verbonden zijn met Access databases en SQL
Server databases. Je gebruikt eerst allerlei wizards om snel en automatisch interfaces te
maken, maar leert daarna ook om code zelf te maken, zodat je je applicaties helemaal aan
je eigen wensen kunt aanpassen.
Moet ik al kunnen programmeren om met dit boek te kunnen werken?
Bij het samenstellen van het boek zijn we er van uit gegaan dat je al enige ervaring met het
programmeren in Visual Basic hebt. Het liefst met VB.NET 2003 of 2005, maar enige
ervaring met Visual Basic 6.0 is ook voldoende. En zelfs als je alleen maar wat ervaring
hebt met andere programmeertalen zou het al moeten lukken. Wat je van databases moet
weten leer je tijdens het maken van de projecten.
Welke software heb ik ten minste nodig om met dit boek te kunnen
werken?
1.
2.
3.
4.
5.
6.
Windows Vista Home Premium
of
Windows XP Pro inclusief servicepakket 2.
VB 2008 Express
Visual Web Developer 2008 Express
SQL Server 2008 Express with Tools
Microsoft Access 2000 of nieuwer. De voorbeelden in dit boek zijn gemaakt met
Access 2007.
De software en databases die bij dit boek horen.
Voorbereiding
Installeer voor je met hoofdstuk 1 begint de benodigde software op je computer.
VB.Net 2008 Express, Visual Web Developer 2008 Express en SQL Server 2008 Express
with Tools zijn gratis te downloaden via http://www.microsoft.com/express/download/. Deze
express versies zijn voldoende om dit boek helemaal te kunnen doorwerken. Natuurlijk zijn
ook de commerciële, volledige versies van deze programma’s geschikt. Let op! Als je al
SQL Server 2005 hebt, doe dan géén upgrade naar 2008, maar verwijder 2005 en
installeer SQLServer 2008 express with Tools.
De software en databases van dit boek zijn gratis te downloaden van
http://www.frinop.nl/downloads.html
Inleiding
Pagina 1
Inhoudsopgave
Inleiding ................................................................................................................................ 1
Is dit boek het juiste boek voor jou? .................................................................................. 1
Moet ik al kunnen programmeren om met dit boek te kunnen werken? ............................ 1
Welke software heb ik ten minste nodig om met dit boek te kunnen werken? .................. 1
Voorbereiding ....................................................................................................................... 1
Inhoudsopgave ..................................................................................................................... 2
Hoofdstuk 1 Je eerste VB.NET programma met een database ............................................ 8
Voorbereiding .................................................................................................................... 8
De database profielkeuzes ................................................................................................ 9
Je eerste project ..............................................................................................................11
Een nieuw project maken .............................................................................................11
Een data source koppelen aan een form met behulp van een wizard ..........................12
Door de dataset bladeren .............................................................................................23
Gegevens wijzigen .......................................................................................................24
Ook kun je de gegevens veranderen. ...........................................................................24
Records toevoegen en verwijderen ..............................................................................24
Hoofdstuk 2 Een Windows programma met een database zelf bouwen ..............................25
Gegevens ophalen ...........................................................................................................25
Een verbinding met de database maken ......................................................................25
Een data source voor je project maken ........................................................................26
De interface maken ..........................................................................................................29
DataBindings instellen......................................................................................................30
Bladeren in de dataset .....................................................................................................32
Naar het volgende record bladeren ..............................................................................32
Het nummer van het huidige record tonen ...................................................................33
Een subroutine maken..................................................................................................34
Naar het vorige record bladeren ...................................................................................35
Naar het eerste record bladeren ...................................................................................36
Naar het laatste record bladeren ..................................................................................36
Voorkomen dat je buiten de dataset probeert te komen ...............................................36
Gegevens wijzigen ...........................................................................................................37
Wijzigingen in het huidige record annuleren .................................................................37
Wijzigingen in meerdere records annuleren .................................................................38
Een nieuw record aanmaken ...........................................................................................38
Try – Catch – End try....................................................................................................39
Een record verwijderen ....................................................................................................40
De wijzigingen in de dataset opslaan in de onderliggende database ...............................41
Hoofdstuk 3 Databases en SQL ..........................................................................................43
Databases ........................................................................................................................43
Tabellen, records en velden .........................................................................................43
Sleutelveld ....................................................................................................................44
Gegevens verdelen over meerdere tabellen .................................................................45
Tabellen koppelen ........................................................................................................47
Relaties en relationele database ..................................................................................47
Een nieuwe database maken met Microsoft Access 2007 ...........................................48
Velden toevoegen aan een tabel ..................................................................................48
Structured Query Language .............................................................................................49
Inhoudsopgave
Pagina 2
Eenvoudige queries ......................................................................................................49
SELECT … FROM … WHERE ....................................................................................49
Oefenen met SQLOefenaar..........................................................................................51
Iets uitgebreidere query’s .............................................................................................52
ORDER BY ...................................................................................................................52
DISTINCT .....................................................................................................................52
Het koppelen van de tabellen in SQL. ..........................................................................52
Oefeningen ...................................................................................................................53
Tenslotte.......................................................................................................................53
Hoofdstuk 4 .NET framework, namespaces en resources ..... Error! Bookmark not defined.
Inleiding .......................................................................... Error! Bookmark not defined.
Het .NET (dotNET) framework ........................................... Error! Bookmark not defined.
Common Language Runtime (CLR) ............................... Error! Bookmark not defined.
Data en XML .................................................................. Error! Bookmark not defined.
Base Class Libraries....................................................... Error! Bookmark not defined.
Namespaces ...................................................................... Error! Bookmark not defined.
Imports statements ......................................................... Error! Bookmark not defined.
Een voorbeeld ................................................................ Error! Bookmark not defined.
Namespaces in web applicaties ..................................... Error! Bookmark not defined.
Resources .......................................................................... Error! Bookmark not defined.
Een referentie toevoegen ............................................... Error! Bookmark not defined.
Plaatjes laden in runtime ................................................ Error! Bookmark not defined.
Wav-bestanden en MP3 bestanden afspelen ................. Error! Bookmark not defined.
Hoofdstuk 5 – Interface objecten op een databound form ..... Error! Bookmark not defined.
Voorbereiding ................................................................. Error! Bookmark not defined.
Objecten plaatsen en objecteigenschappen ...................... Error! Bookmark not defined.
Formulieren .................................................................... Error! Bookmark not defined.
Tekstvakken en labels .................................................... Error! Bookmark not defined.
De taakbalk Layout ......................................................... Error! Bookmark not defined.
Objecten op het formulier instellen en aan de database koppelen ....Error! Bookmark not
defined.
Tekstvakken ................................................................... Error! Bookmark not defined.
MaskedTextBox .............................................................. Error! Bookmark not defined.
Checkbox ....................................................................... Error! Bookmark not defined.
Knoppen ......................................................................... Error! Bookmark not defined.
Snelknopcombinatie ....................................................... Error! Bookmark not defined.
Een knop met een icoon ................................................. Error! Bookmark not defined.
De tekst van een knop in runtime aanpassen ................. Error! Bookmark not defined.
De tekst van een knop uit de database halen ................. Error! Bookmark not defined.
Objecten uitschakelen en onzichtbaar maken ................ Error! Bookmark not defined.
Bepalen welk object de focus heeft ................................ Error! Bookmark not defined.
Door een formulier tabben .............................................. Error! Bookmark not defined.
Keuzelijsten .................................................................... Error! Bookmark not defined.
Afbeeldingvak ................................................................. Error! Bookmark not defined.
Datagridview (dataraster) ............................................... Error! Bookmark not defined.
DateTimePicker en MonthCalender................................ Error! Bookmark not defined.
Tooltip............................................................................. Error! Bookmark not defined.
Objectgebeurtenissen (events) en hun subroutines (event handlers) ..... Error! Bookmark
not defined.
Gebeurtenissen en hun subroutines ............................... Error! Bookmark not defined.
Inhoudsopgave
Pagina 3
Overzicht gebeurtenissen ............................................... Error! Bookmark not defined.
Hoofdstuk 6 Zonder wizards, maar in code .......................... Error! Bookmark not defined.
Gegevens ophalen in code - uitleg ..................................... Error! Bookmark not defined.
Een verbinding maken in code ....................................... Error! Bookmark not defined.
Een query maken in code ............................................... Error! Bookmark not defined.
Een commando maken in code ...................................... Error! Bookmark not defined.
Een data-adapter maken in code ................................... Error! Bookmark not defined.
Een dataset maken in code ............................................ Error! Bookmark not defined.
Een dataset vullen in code ............................................. Error! Bookmark not defined.
Een datagridview aan een dataset koppelen in code ..... Error! Bookmark not defined.
Namespaces .................................................................. Error! Bookmark not defined.
Gegevens ophalen uit een database in code – aan de slag..............Error! Bookmark not
defined.
Een DataGridView vullen in code ................................... Error! Bookmark not defined.
Het gebruik van “ ,’ , & en _ in query’s ............................ Error! Bookmark not defined.
& ..................................................................................... Error! Bookmark not defined.
& en _ ............................................................................. Error! Bookmark not defined.
Een datareader gebruiken in code ................................. Error! Bookmark not defined.
Een listbox vullen in code ............................................... Error! Bookmark not defined.
Een tekstvak vullen in code ............................................ Error! Bookmark not defined.
Objecten aan een dataset binden in code ......................... Error! Bookmark not defined.
Een tekstvak aan een dataset binden in code ................ Error! Bookmark not defined.
Een listbox aan een dataset binden in code ................... Error! Bookmark not defined.
Een combobox aan een dataset binden in code ............. Error! Bookmark not defined.
Een datagridview opmaken in code ................................ Error! Bookmark not defined.
De gegevens in een database wijzigen in code ................. Error! Bookmark not defined.
Een record toevoegen aan een database in code .......... Error! Bookmark not defined.
Gegevens wijzigen in een database in code .................. Error! Bookmark not defined.
Een record verwijderen uit een database in code ........... Error! Bookmark not defined.
Afbeeldingen tonen via een database in code ................... Error! Bookmark not defined.
Gegevens uit een Microsoft Excel bestand inlezen naar een Microsoft Access database
........................................................................................... Error! Bookmark not defined.
Hoofdstuk 7 Afdrukken op papier ......................................... Error! Bookmark not defined.
PrintPreViewDialog......................................................... Error! Bookmark not defined.
Afdrukken van tekst uit een RichTextBox ....................... Error! Bookmark not defined.
Printdocument opmaken................................................. Error! Bookmark not defined.
PrintPreviewDialog instellen ........................................... Error! Bookmark not defined.
Een afbeelding van het formulier afdrukken ................... Error! Bookmark not defined.
Afbeeldingen in een database afdrukken ....................... Error! Bookmark not defined.
Het PrintDocument instellen in code............................... Error! Bookmark not defined.
PageSetupDialog object ................................................. Error! Bookmark not defined.
Portrait en Landscape .................................................... Error! Bookmark not defined.
Afdrukken over meerdere pagina’s ................................. Error! Bookmark not defined.
Afdrukken van gegevens uit een dataset over meerdere pagina’s met 1 afbeelding en
set gegevens per pagina ................................................ Error! Bookmark not defined.
Afdrukken van gegevens uit een dataset over meerdere pagina’s Error! Bookmark not
defined.
Afdrukken via het scherm ‘Afdrukken’ ............................ Error! Bookmark not defined.
Afdrukken naar schijf ...................................................... Error! Bookmark not defined.
Hoofdstuk 8 Web applicaties met databases ......................... Error! Bookmark not defined.
Inhoudsopgave
Pagina 4
Inleiding .......................................................................... Error! Bookmark not defined.
Web pagina’s aanvragen en verzenden ......................... Error! Bookmark not defined.
Voorbereiding ................................................................. Error! Bookmark not defined.
Een eerste vingeroefening .............................................. Error! Bookmark not defined.
En hoe werkt dit nou allemaal? ...................................... Error! Bookmark not defined.
De database ................................................................... Error! Bookmark not defined.
De solution Snelkoppeling .............................................. Error! Bookmark not defined.
De interface .................................................................... Error! Bookmark not defined.
Het scherm inloggen....................................................... Error! Bookmark not defined.
De database plaatsen..................................................... Error! Bookmark not defined.
Een verbinding met de database maken ........................ Error! Bookmark not defined.
Een DataSource instellen ............................................... Error! Bookmark not defined.
Het controleren van de login gegevens .......................... Error! Bookmark not defined.
Postback en viewstate .................................................... Error! Bookmark not defined.
Het doorgeven van waarden tussen webpagina’s .......... Error! Bookmark not defined.
Client-Side en Server-Side opslag van gegevens .......... Error! Bookmark not defined.
Cookies en sessies......................................................... Error! Bookmark not defined.
Opslaan van gegevens in een sessie ............................. Error! Bookmark not defined.
Uitlezen van gegevens in een sessie ............................. Error! Bookmark not defined.
De wensen pagina .......................................................... Error! Bookmark not defined.
Objecten afsluiten voor wijzigingen door de gebruiker ... Error! Bookmark not defined.
Ontwerpen van de pagina wensen ................................. Error! Bookmark not defined.
Objecten op een web formulier koppelen aan een database .........Error! Bookmark not
defined.
Een dropdownlistbox aan gegevens uit meerdere data sources binden.................Error!
Bookmark not defined.
Een select query opbouwen ........................................... Error! Bookmark not defined.
Hoofdstuk 9 Datavalidatie ...................................................... Error! Bookmark not defined.
Inleiding .......................................................................... Error! Bookmark not defined.
Datavalidatie in de database .............................................. Error! Bookmark not defined.
Het juiste gegevenstype ................................................. Error! Bookmark not defined.
Validatieregel .................................................................. Error! Bookmark not defined.
Validatieoperatoren en jokertekens ................................ Error! Bookmark not defined.
Validatietekst .................................................................. Error! Bookmark not defined.
Invoermasker .................................................................. Error! Bookmark not defined.
Voorbeelden van invoermaskers: ................................... Error! Bookmark not defined.
Validatie in de interface ...................................................... Error! Bookmark not defined.
Validatie in een Windows Forms applicatie .................... Error! Bookmark not defined.
ToolTip ........................................................................... Error! Bookmark not defined.
Ingevoerde waarden controleren .................................... Error! Bookmark not defined.
DateTimePicker en MonthCalender................................ Error! Bookmark not defined.
Validatie in een web applicatie ........................................... Error! Bookmark not defined.
Validatiebesturingselementen ........................................ Error! Bookmark not defined.
Hoofdstuk 10 VB.NET met andere databases zoals SQL Server 2008 Express en MySQL
.............................................................................................. Error! Bookmark not defined.
Inleiding .......................................................................... Error! Bookmark not defined.
Voorbereiding ................................................................. Error! Bookmark not defined.
SQL Server ..................................................................... Error! Bookmark not defined.
Een SQL Server database maken .................................. Error! Bookmark not defined.
Een tabel toevoegen aan een SQL Server database ..... Error! Bookmark not defined.
Inhoudsopgave
Pagina 5
Gegevens toevoegen aan een tabel in een SQL Server database Error! Bookmark not
defined.
Een dataset vullen .......................................................... Error! Bookmark not defined.
Een SQL server database benaderen via code ..................... Error! Bookmark not defined.
Invoegen van records in een SQLserver database in code. ..........Error! Bookmark not
defined.
SQL Server Management Studio ....................................... Error! Bookmark not defined.
Een SQL Server database benaderen of maken buiten VB.NET om .. Error! Bookmark
not defined.
VB.NET met MYSQL.......................................................... Error! Bookmark not defined.
Waarschuwing ................................................................ Error! Bookmark not defined.
Inleiding .......................................................................... Error! Bookmark not defined.
Voorbereiding ................................................................. Error! Bookmark not defined.
phpMyAdmin .................................................................. Error! Bookmark not defined.
Een MYSQL database maken ........................................ Error! Bookmark not defined.
Een tabel in een MYSQL database maken ..................... Error! Bookmark not defined.
Records in een MYSQL database tabel maken .............. Error! Bookmark not defined.
Een ODBC database benaderen met of zonder DSN bestand ......Error! Bookmark not
defined.
Een DSN bestand maken ............................................... Error! Bookmark not defined.
Verbinding maken met een MySQL database en gegevens selecteren .................Error!
Bookmark not defined.
Een record toevoegen aan een MYSQL database ......... Error! Bookmark not defined.
Een record verwijderen uit een MYSQL database .......... Error! Bookmark not defined.
Hoofdstuk 11 Een setup maken voor een Windows programma ..........Error! Bookmark not
defined.
Voorbereiding ................................................................. Error! Bookmark not defined.
De map Resources wordt gekopieerd ............................ Error! Bookmark not defined.
Je programma klaarmaken voor de setup .......................... Error! Bookmark not defined.
De bronbestanden klaarmaken voor de setup ................ Error! Bookmark not defined.
De connection string(s) aanpassen ................................ Error! Bookmark not defined.
Connectionstrings(s) in app.config aanpassen ............... Error! Bookmark not defined.
Verwijzingen in de code aanpassen ............................... Error! Bookmark not defined.
Verwijzingen in het tabblad Properties aanpassen ......... Error! Bookmark not defined.
Verbindingsstrings met My.Computer.Filesystem.CurrentDirectory .... Error! Bookmark
not defined.
Een splash screen toevoegen ............................................ Error! Bookmark not defined.
De instellingen op het tabblad Publish ............................... Error! Bookmark not defined.
Bepalen waar de setup bestanden komen te staan ........ Error! Bookmark not defined.
Application Files ............................................................. Error! Bookmark not defined.
Prerequisites .................................................................. Error! Bookmark not defined.
Updates .......................................................................... Error! Bookmark not defined.
Options ........................................................................... Error! Bookmark not defined.
Setup uitvoeren .................................................................. Error! Bookmark not defined.
Bepalen waar je programma wordt geïnstalleerd op de computer van de gebruiker
....................................................................................... Error! Bookmark not defined.
Hoofdstuk 12 Je webapplicatie beschikbaar maken voor het Internet ..Error! Bookmark not
defined.
Web server software op je computer plaatsen ................... Error! Bookmark not defined.
Inhoudsopgave
Pagina 6
Testen of er web server software actief is op je machine ..............Error! Bookmark not
defined.
Internet Information Server installeren ............................ Error! Bookmark not defined.
IIS 5 in Windows XP Pro ................................................ Error! Bookmark not defined.
IIS 7 in Windows Vista .................................................... Error! Bookmark not defined.
.NET 3.5 installeren ........................................................ Error! Bookmark not defined.
IIS downloaden en installeren ........................................ Error! Bookmark not defined.
.NET 3.5 testen .............................................................. Error! Bookmark not defined.
.NET 3.5 aanmelden bij IIS ............................................. Error! Bookmark not defined.
Opnieuw testen .............................................................. Error! Bookmark not defined.
Je web applicatie klaar maken voor gebruik op een web server .......Error! Bookmark not
defined.
Debug modus uitschakelen ............................................ Error! Bookmark not defined.
De connection string aanpassen .................................... Error! Bookmark not defined.
De web applicatie op de web server plaatsen .................... Error! Bookmark not defined.
Virtuele mappen ............................................................. Error! Bookmark not defined.
Een virtuele map maken ................................................. Error! Bookmark not defined.
Je web server toegankelijk maken op het Internet ............. Error! Bookmark not defined.
Domeinnaam .................................................................. Error! Bookmark not defined.
Vast IP adres .................................................................. Error! Bookmark not defined.
Router instellen .............................................................. Error! Bookmark not defined.
Bijlage 1 – Installatie IIS en/of APACHE + PHP + MYSQL + PhpMyadmin + ODBC driver
.............................................................................................. Error! Bookmark not defined.
INTERNET INFORMATION SERVICE .............................. Error! Bookmark not defined.
APACHE +PHP + MYSQL + PhpMyadmin + ODBC driver Error! Bookmark not defined.
PHPMYADMIN ................................................................... Error! Bookmark not defined.
myODBC driver .................................................................. Error! Bookmark not defined.
Inhoudsopgave
Pagina 7
Hoofdstuk 1 Je eerste VB.NET programma met een database
VB.NET is prima geschikt om interfaces voor databases mee te maken. Je kunt er zowel
Windows programma’s als websites mee maken. Je begint al direct in dit eerste hoofdstuk
met het maken van een Windows programma dat je koppelt aan een Access database. Om
het eenvoudig te houden gebruik je een kant en klare database en maak je de interface met
behulp van een wizard.
Voorbereiding
In dit boek gebruik je een map genaamd vb2008metdatabases op de c: schijf met daarin
een aantal mappen voor de projecten die je maakt. Om verwarring te voorkomen is het
handig dat jij op jouw computer dezelfde mappenstructuur gebruikt als in de voorbeelden in
dit boek.
1. Maak op je computer (liefst op de c: schijf) een nieuwe map genaamd
vb2008metdatabases.
Hierin bewaar je de bestanden die bij dit boek horen.
2. Surf naar http://www.frinop.nl/downloads.html en download het bestand
vb2008metdatabases.zip. Dit bestand bevat alle bestanden die bij dit boek horen.
Als je geen zip-uitpak programma hebt, kun je de bestanden ook 1 voor 1
downloaden. Ze hoeven dan niet te worden uitgepakt.
3. Sla het bestand/de bestanden op in c:\vb2008metdatabases.
4. Pak eventueel het zip-bestand uit met een uitpakprogramma zoals WinZip en zet de
uitgepakte bestanden ook weer in c:\vb2008metdatabases.
De databases die je in dit boek gebruikt staan er elk twee keer in: 1 keer als Access 2007
bestand, met de extensie accdb, en 1 keer als Access 2000/2003 bestand met de extensie
mdb. Kies de databases die passen bij jouw versie van Access. In dit boek gebruiken we
Access 2007, maar er kan ook prima met Access 2000/2003 bestanden worden gewerkt.
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 8
De database profielkeuzes
Om interfaces voor databases te programmeren heb je geen uitgebreide kennis van
databaseontwerp nodig. Toch is het wel handig dat je het een en ander weet van de
database waarmee je werkt. Daarom kijk je eerst even naar hoe de database waarmee je
gaat werken in elkaar zit. De database heet profielkeuzes.accdb. Aan de extensie accdb of
mdb kun je zien dat het een Microsoft Access database is. Je kunt het bestand dus met
Access openen en bekijken. Als je de bestanden inmiddels gedownload hebt (zie de vorige
alinea), bevindt profielkeuzes zich in de map vb2008metdatabases.
1. Zoek in de verkenner in de map c:\vb2008metdatabases het bestand
profielkeuzes.accdb op en open het door er twee keer op te klikken.
Als de beveiliging van je computer streng is ingesteld verschijnen er misschien een
of meerdere waarschuwingen voor virussen. Profielkeuzes bevat absoluut geen
virussen, dus open het bestand gerust.
Je ziet dat de database profielenkeuzes twee tabellen bevat: nawgegevens en profielen.
Kijk eerst maar eens welke velden de tabel nawgegevens bevat.
2. Rechtsklik op nawgegevens.
3. Klik op het pijltje omlaag (▼) onder Weergave en dan op Ontwerpweergave.
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 9
Het ontwerp van de tabel nawgegevens verschijnt.
Je ziet dat de tabel nawgegevens verschillende velden heeft, van id tot en met foto. Het
belangrijkste veld is id. In dit veld staat het identificatienummer van elke persoon in de
tabel. Iedereen in deze database heeft een uniek id-nummer en daarom is id een
zogenaamd sleutelveld in deze tabel. Dat betekent dat in het veld id niet twee keer
dezelfde waarde mag voorkomen. Het sleutel symbool voor id laat zien dat het een
sleutelveld is.
Het gegevenstype van het veld id is AutoNummering. Dit betekent dat elke nieuwe
persoon die aan de database wordt toegevoegd automatisch een nieuw, uniek id-nummer
krijgt toegewezen. Dat dit erg handig is, zul je later nog zien.
De meeste andere velden bevatten tekst. Het veld website is van het type hyperlink omdat
daarin hyperlinks naar websites bewaard worden. En het veld foto is van het type OLEobject en bevat de foto van de persoon.
Kijk maar eens welke informatie de tabel bevat.
1. Klik op het pijltje omlaag (▼) onder Weergave en dan op Gegevensbladweergave.
Je ziet nu de inhoud van de tabel nawgegevens; de records met hun gegevens. Bij website
en foto is nog niets ingevuld.
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 10
1. Sluit Access door in het rode vakje rechtsboven op het kruisje te klikken.
Zo, nu heb je een idee wat er in de tabel nawgegevens zit.
Je eerste project
Genoeg theorie. Je gaat je eerste interface maken.
Een nieuw project maken
1. Start VB.NET.
2. Kies in het vak Recent Projects naast Create: op Project ….
3. Kies voor Windows Forms Application.
4. Geef het project de naam nawgegevens.
5. Klik op de knop OK.
VB.NET maakt een project nawgegevens en aantal standaardbestanden. Je ziet
rechtsboven in de Solution Explorer in het project nawgegevens een leeg formulier
genaamd Form1.
Je slaat het project gelijk op in een map genaamd hoofdstuk 1. In deze map maakt VB.NET
een automatisch nieuwe map voor het project. Deze map voor alle bij het project
behorende bestanden heet nawgegevens.
1. Kies in het menu File de optie Save All.
In het scherm Save Project staat achter Name: de naam van het project. Dus
nawgegevens. Achter Location komt de naam van de map waarin de solution wordt
opgeslagen. En achter Solution Name: staat de naam van de solution. In dit geval noemen
we de solution ook nawgegevens. Een solution is een soort superproject dat meerdere
projecten kan bevatten.
2. Pas de tekst in het vak achter Location aan zodat deze verwijst naar de map
C:\vb2008metdatabases\hoofdstuk1.
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 11
3. Klik op Save.
Je kunt het resultaat van deze actie bekijken in je verkenner.
4. Open in de verkenner de map vb2008metdatabases.
Een data source koppelen aan een form met behulp van een wizard
Voor je eerste project maak je gebruik van een tweetal wizards die je door de hele
procedure leiden.
1. Kies uit het menu Data – Add New Data Source.
De Data Source Configuration Wizard wordt gestart en het onderstaande scherm verschijnt.
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 12
Je gaat een database gebruiken als onderliggende bron van gegevens en laat dus de
standaardkeuze Database zo staan.
2. Klik op Next.
Het volgende scherm van de wizard verschijnt.
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 13
In dit scherm kies je welke connection (verbinding) naar een database je gaat gebruiken.
Als je al eerder met VB 2008 een connection naar een database hebt gemaakt, zoals in dit
voorbeeld naar students.mdb, staan er al 1 of meerdere connections in de dropdown list.
Maar je gaat nu een nieuwe connection naar een database maken.
3. Klik op New Connection.
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 14
In dit scherm kun je aangeven welke database je gaat gebruiken en of er een password op
de verbinding gezet moet worden. De data source (database) bevindt zich op je computer,
dus My Computer laat je aangevinkt staan. Maar in het tekstvak Data source moet de naam
van de database komen te staan. Die zoek je op.
4. Klik op Change….
Je ziet dan het volgende scherm.
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 15
In dit scherm kies je Microsoft Access Database File om aan te geven dat het om een
Microsoft Acces database gaat. In een later hoofdstuk leer je hoe je een verbinding maakt
met een Microsoft SQL Server database.
5. Kies Microsoft Access Database File.
6. Klik op OK.
In het volgende scherm Add Connection kies je welke database het gaat worden.
7. Klik op Browse.
8. Surf naar c:\vb2008metdatabases.
9. Kies profielkeuzes.accdb (of profielkeuzes.mdb als je met Access 2000/2003
werkt).
10. Klik op Openen.
Het scherm ziet er nu als volgt uit:
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 16
Omdat de database niet met een password is beveiligd, kun je de standaard User name
Admin laten staan en het Password tekstvak leeg laten. Maar het is wel verstandig om even
te testen of de verbinding ook werkt.
11. Klik op de knop Test Connection om te controleren of de verbinding goed ingesteld
is.
Als je alles goed hebt gedaan zal de verbinding goed zijn.
12. Klik op OK.
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 17
In het volgende scherm zie je dat de verbinding met de database, de connection, is
ingesteld. Er is een verbinding profielkeuzes.accdb. En als je op het plusteken naast
Connection string klikt, kun je de connection string ook zien.
13. Klik op het plus teken naast Connection String.
14. Klik op de knop Next.
Er verschijnt een scherm waarin wordt gevraagd of er van de database een kopie gemaakt
moet worden in de projectmap en de connection (verbindingsstring) aangepast. Het is
verstandig om dit wel te doen. Er wordt dan een kopie van
c:\vb2008metdatabases\profielen.accdb gemaakt en deze wordt in de map met alle
projectbestanden geplaatst. Natuurlijk wordt ook automatisch de verbindingsstring
aangepast. Het voordeel van het gebruiken van zo’n kopie is dat de database nu onderdeel
wordt van het project en bij het maken van een setup bestand van je uiteindelijke
programma wordt meegenomen.
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 18
15. Klik op Ja.
Er verschijnt weer een scherm met een vraag.
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 19
Ook deze vraag is belangrijk. De wizard wil weten of je de verbindingsstring wilt opslaan in
het configuratiebestand van je project. Dat is heel handig als je een project hebt met
meerdere forms die gebruik maken van dezelfde database. Je kunt dan telkens dezelfde
verbindingsstring gebruiken. Ook is het handig als je later de locatie van je database wilt
veranderen. Je hoeft dan maar 1 keer de verbindingsstring in het configuratie bestand aan
te passen, en niet op elke pagina waar je de verbinding gebruikt. Doen dus. Het vakje Save
the connection as: is al aangevinkt. De wizard geeft zelf al een logische naam voor de
string. Die hoef je ook niet aan te passen.
16. Klik op Next.
In het volgende scherm kun je Database Objecten kiezen. Dit zijn de tabellen en views die
je gaat gebruiken in je programma. Je wilt van de tabel nawgegevens de gegevens in alle
velden kunnen gebruiken.
17. Klik op het plus teken naast Tables.
18. Klik op het plus teken naast nawgegevens.
19. Klik op het vakje naast nawgegevens.
Alle velden van de tabel nawgegevens zijn nu aangevinkt. Het scherm ziet er als volgt uit:
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 20
20. Klik op de knop Finish.
De wizard sluit af. Je bent weer terug in het hoofdscherm van VB.NET. Het lijkt of er niets is
gebeurd. Je form is nog steeds leeg. Maar dat is niet zo. Achter de schermen is er een
heleboel gebeurd. Dat zul je zo dadelijk wel zien. In het scherm Solution Explorer rechts
boven aan het scherm zie je dat er een dataset bij gekomen is: profielkeuzesDataSet.xsd.
Deze dataset bevat de informatie die nodig is om straks de gegevens te kunnen ophalen.
Dat kun je ook zien.
1. Rechtsklik op profielkeuzesDataSet.xsd en kies View Designer.
In het scherm dat verschijnt zie je bovenaan de namen van de velden. Als je je cursor even
boven Fill, Get Data onderaan houdt, zie je de query die wordt gebruikt om deze gegevens
op te halen. Snap je nog niet hoe dit werkt, dan geeft dit niet. In hoofdstuk 3 leer je dit. Je
gaat eerst het View Designer scherm afsluiten.
2. Rechtsklik op de tab profielkeuzesDataSet.xsd en klik op Close.
Maar nu wil je die gegevens natuurlijk ook op je form zien. Dat kan. Daarvoor gebruik je het
Data Sources scherm.
1. Klik rechts onder het Solution Explorer scherm op het tab Data Sources.
2. Klik op het plusteken naast nawgegevens.
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 21
Je ziet dan:
Wanneer je een van de objecten kiest verschijnt ernaast een dropdown lijst met alle
mogelijke objecten die de gegevens op het form kunnen weergeven.
3. Klik op nawgegevens.
4. Kies uit de dropdown lijst Details.
Wanneer je het object nawgegevens nu naar het form sleept maakt VB automatisch
tekstvakken en labels voor alle velden van de tabel nawgegevens aan en verbindt ze met
de gegevens in de database die je eerder hebt gekozen.
5. Sleep nawgegevens naar Form1 en laat los.
Je form ziet er nu zo uit:
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 22
Je ziet links in labels de namen van de velden in de tabel nawgegevens met daarnaast de
tekstvakken voor de inhoud van de velden. Die wizard heeft ze op de volgorde gezet waarin
ze in de database staan. Dat is niet altijd handig. Later leer je hoe je zelf de volgorde van
de velden kunt bepalen. Voor nu laat je het maar zo. Ook heeft de wizard een navigatiebalk
met een aantal knoppen gemaakt. Met deze knoppen kun je de door de gegevens
bladeren, gegevens toevoegen, gegevens aanpassen en gegevens verwijderen.
1. Start je project.
Door de dataset bladeren
Je ziet dat de tekstvakken gevuld zijn met de gegevens uit het eerste record van je data
source; de tabel nawgegevens uit de database profielen. Je ziet nu de gegevens in het
eerste van de 3 records die in de dataset zitten. Je kunt bladeren met de pijltjes toetsen.
1. Klik op de knop >.
Je ziet nu de gegevens van het tweede record.
2. Klik op de knop <.
Je bent een record terug gebladerd en ziet weer de gegevens van het eerste record.
3. Klik op de knop >>.
Je bent nu naar de laatste record, naar nummer 3 van 3 gesprongen.
4. Klik op de knop <<.
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 23
Je bent nu naar de eerste record, naar nummer 1 van 3 gesprongen.
Gegevens wijzigen
Ook kun je de gegevens veranderen.
1. Verander in het eerste record het profiel in NT.
2. Blader naar een ander record en weer terug naar record 1.
Je ziet dat Jan de Vries als profiel nog steeds NT heeft. De wijziging is dus doorgevoerd in
de dataset (gegevensverzameling) waarmee dit formulier werkt.
Maar let op! De wijziging is nog niet doorgegeven aan de database die op schijf staat. Dit
kun je zien als je de gegevens opnieuw van schijf ophaalt.
3. Sluit je programma af.
4. Start het weer op.
Je ziet dat er bij Jan de Vries bij profiel weer NG staat. Je aanpassing is dus niet
doorgevoerd in de onderliggende tabel nawgegevens in de database profielen.
1. Verander in het eerste record het profiel opnieuw in NT.
2. Klik op de knop Save Data. Dat is de knop met het diskette symbool. (de meest
rechtse knop).
3. Sluit je programma af.
4. Start het weer op.
Je ziet nu dat je aanpassing wel is bewaard. Dus denk erom; na een aanpassing moet je
opslaan om de wijzigingen ook in de onderliggende database door te voeren.
Je hoeft trouwens niet na elke wijziging op Save Data te klikken. Dat zou wel erg onhandig
zijn. Je kunt ook pas opslaan wanneer je een hele serie wijzigingen, ook in meerdere
records, hebt doorgevoerd.
Mocht je gemaakte wijzigingen niet willen doorvoeren, sluit dan het programma af zonder
op Save Data te klikken. Alle wijzigingen die je hebt doorgevoerd sinds je voor het laatst op
Save Data hebt geklikt worden dan niet opgeslagen.
Records toevoegen en verwijderen
Er zijn twee knoppen die je nog niet gebruikt hebt: Add en Delete. Wanneer je op de knop
Add (met het plus teken) klikt wordt aan de dataset een nieuw record toegevoegd. Denk er
wel aan dat je na het invullen van de gegevens op de knop Save Data klikt om de
gegevens van de nieuwe record ook naar de database op schijf te schrijven.
Wanneer je op de knop Delete (met het rode kruis) klikt wordt het huidige record uit de
dataset verwijderd. Omdat dit nog niet in de database op schijf is bijgewerkt kun je dit
eventueel nog ongedaan maken door voor je afsluit NIET op Save Data te klikken. Pas
wanneer je op de knop Save Data klikt wordt het record ook uit de database op schijf
verwijderd.
1. Test het verwijderen en toevoegen van records.
Hoofdstuk 1 Je eerste VB.NET programma met een database
Pagina 24
Hoofdstuk 2 Een Windows programma met een database zelf
bouwen
In hoofdstuk 1 heb je een interface helemaal met wizards gemaakt. In dit hoofdstuk ga je
weer een interface bij dezelfde database maken. Maar dit keer maak je de objecten zelf en
koppel je ze ook zelf aan de gegevens in de database.
Om te beginnen maak je een nieuw project.
6.
7.
8.
9.
Start VB.NET.
Kies Create Project ….
Kies voor Windows Forms Application.
Geef het project de naam profielkeuzes.
Je slaat weer gelijk de gemaakte bestanden op in een nieuwe map.
5. Kies in het menu File de optie Save All.
In het scherm Save Project staat achter Name: de naam van het project. Dus profielkeuzes.
6. Pas de tekst in het vak achter Location aan zodat deze verwijst naar de map
C:\vb2008metdatabases\hoofdstuk2
7. De solution noem je net als je project profielkeuzes.
8. Klik op Save.
Gegevens ophalen
Om gegevens van een database te kunnen gebruiken moet je de juiste gegevens eerst uit
de database ophalen. Hiervoor heb je drie dingen nodig:
a) Een verbinding met de database.
b) Een aantal commando’ s om de juiste gegevens uit de database op te halen, te
bewerken en de wijzigingen naar de database op schijf door te geven.
c) Een dataset object om de opgehaalde gegevens in te bewaren.
Een verbinding met de database maken
VB.NET heeft een object Server Explorer dat in data connection objecten, in het
Nederlands verbindingsobjecten, bijhoudt welke databases waar op je computer staan.
1. Klik in het menu op View – Database Explorer.
Links in je scherm verschijnt de Database Explorer. Je ziet hier alle verbindingen met
databases die er al op je computer staan. In dit voorbeeld is dat de database
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 25
Students.mdb. Students.mdb is geen onderdeel van je project. Je ziet dus echt alle
verbindingen op je computer, niet alleen de verbindingen in het huidige project. Als je nog
geen verbinding met een database op je computer hebt gemaakt, zie je hier alleen Data
Connections.
Je hebt in hoofdstuk 1 in de wizard al gezien hoe je een verbinding (connection) naar een
database (data source) maakt via het menu Data. Dat werkt prima, maat dit keer doe je het
via de Database Explorer.
2. Rechtsklik op Data Connections en klik op Add Connection.
Je komt in hetzelfde scherm Add Connection terecht als in hoofdstuk 1.
3. Klik op Browse en open de database
C:\vb2008metdatabases\profielkeuzes.accdb.
Dit is dezelfde database als in hoofdstuk 1.
4. Test de connection.
5. Klik op OK.
Je ziet in de Database Explorer links boven nu ook een verbinding naar de database
profielkeuzes.accdb.
6. Klik op het plus teken naast profielkeuzes.accdb.
7. Klik op het plus teken naast Tables.
Je ziet nu dat de database profielkeuzes.accdb twee tabellen bevat: nawgegevens en
profielen.
Wanneer je op de plus tekens naast de tabellen klikt, zie je ook de velden die de tabellen
bevatten. De Database Explorer laat dus duidelijk zien voor welke databases er al
verbindingen zijn, en welke tabellen, velden e.d. deze databases bevatten.
Een data source voor je project maken
De volgende stap is om de gegevens van zo’n database beschikbaar te maken voor je
project, dus om er een data source voor je project van te maken. Ook dit heb je eerder
gedaan.
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 26
Klik op Data – Add New Data Source.
Klik op Database – Next.
Kies uit de dropdown lijst met beschikbare data connections profielkeuzes.accdb.
Klik op Next.
Klik op Ja om de connection string in als variabele in het bestand app.config op te
slaan.
6. Zet een vinkje voor de tabel nawgegevens in Tables.
7. Klik op Finish.
1.
2.
3.
4.
5.
In de Solution Explorer rechts boven is de data source profielkeuzesDataSet1.xsd
verschenen. Deze data source is een zogenaamde dataset. Een dataset is een object
waarin ingelezen gegevens bewaard kunnen worden. Er zijn ook andere soorten data
sources, maar verreweg de meest handige is de dataset.
De dataset die je zojuist hebt gemaakt bevat alle gegevens van de tabel nawgegevens.
Dus niet de gegevens uit de tabel profielen. Die heb je in dit project niet nodig. Je kunt in
een dataset wel gegevens uit meerdere tabellen opslaan. En je kunt zelfs gegevens uit
meerdere tabellen combineren. Hoe dat gaat leer je in een ander hoofdstuk van dit boek.
Je kunt nu ook al zien welke gegevens er precies in de data source zitten.
1.
2.
3.
4.
Klik op het tabblad Data Source rechts boven in je scherm.
Klik op de dataset profielkeuzesDataSet1.xsd.
Klik op Preview Data.
Klik op Preview.
Je ziet nu de gegevens (data) die in de data source zitten.
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 27
5. Klik op de knop Close om het venster te sluiten.
Je bent nu klaar om de interface te gaan maken.
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 28
De interface maken
Form1 zoals het er staat is te klein.
1. Klik op Form1.
Je ziet dan blokjes verschijnen op de rechterrand en de onderrand van het formulier.
2. Plaats de cursor rechts onder aan het formulier totdat deze in een diagonale pijl
verandert.
3. Houdt de linker muisknop ingedrukt en trek het formulier breder en langer.
4. Laat de linker muisknop los.
Plaats tekstvakken en knoppen op Form1, zodat het overeenkomt met het voorbeeld
hieronder.
Je hebt nu de basis van het formulier gemaakt; tekstvakken voor de informatie en labels die
aangeven welke informatie in de tekstvakken staat.
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 29
DataBindings instellen
De volgende stap is het verbinden van een tekstvak aan de juiste gegevens in de dataset.
1. Klik op Textbox1.
2. Klik in het scherm Properties op de 3 puntjes naast Databindings Advanced.
3. Klik in de dropdown lijst op Other Data Sources – Project DataSources –
profielkeuzesDataSet – nawgegevens – id.
Je kunt van een tekstvak heel veel instellen, maar wanneer je niets anders kiest, stel je in
dit scherm in waar de tekst die in het vak komt vandaan moet komen. In het volgende
scherm kun je ook zien dat de eigenschap text is ingesteld. In het vak Property is voor Text
het database symbool verschenen.
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 30
De tekst van textbox1 is dus nu gekoppeld aan de inhoud van het veld id in de dataset
profielkeuzesDataSet. Deze dataverbinding (databinding) heeft ook een naam gekregen:
NawgegevensBindingSource - id. Je ziet deze onder Binding.
Je kunt in dit scherm ook nog instellen in welke vorm de inhoud van het tekstvak getoond
moet worden, maar dat is nu niet nodig.
Je bent klaar voor om te testen of het eerste tekstvak vastzit aan de juiste gegevens.
1. Klik op OK.
2. Klik op de het Start driehoekje.
Het project start in een Windows scherm. In de eerste tekstbox verschijnt het id-nummer
van het eerste record: 1. Het werkt!!!!
3. Sluit je project.
1. Verbind nu op dezelfde manier alle tekstvakken met de juiste velden.
Als je alles goed gedaan hebt, staat nu in elk tekstvak het juiste gegeven van het eerste
record. Je ziet nu alle gegevens van het eerste record in de dataset. Als je je met het
koppelen hebt vergist, zie je dat nu en kun je nog verbeteringen aanbrengen. Zoals je in
hoofdstuk 1 hebt gezien kun je in plaats van zelf een tekstvak maken en verbinden aan het
juiste veld in de juiste tabel in de dataset natuurlijk ook het veld van uit het scherm data
sources op het form slepen. Maar zelf alles kunnen instellen biedt toch meer
mogelijkheden.
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 31
2. Controleer of het ook allemaal goed werkt.
3. Sluit nu je project.
Bladeren in de dataset
Maar je bent natuurlijk niet tevreden met alleen maar de inhoud van het eerste record. Je
wilt meer! Je wilt door de records kunnen bladeren en ze kunnen bewerken.
1. Voeg knoppen en een label aan je interface toe, zodat die overeenkomt met de
afbeelding hieronder.
2. Noem de objecten van links naar rechts en van boven naar onder als volgt:
btnEerste, btnVorige, lblRecords, btnVolgende, btnLaatste
btnAnnuleer, btnAnnuleerAlle
btnVoegToe, btnVerwijder
btnOpslaan
Naar het volgende record bladeren
Wil je dat er iets gebeurt wanneer je op zo’n knop klikt, dan moet er code achter. Als eerste
de code voor de knop btnVolgende.
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 32
1. Dubbelklik op de Volgende knop (met het > teken).
2. Type de volgende regel code in de subroutine btnVolgende_Click.
NawgegevensBindingSource.MoveNext()
De subroutine ziet er dan als volgt uit.
Private Sub btnVolgende_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnVolgende.Click
NawgegevensBindingSource.MoveNext()
End Sub
Maar wat betekent die code dan precies?
Om een object zoals een tekstvak aan een dataset te binden gebruikt VB een
BindingSource object. Zo’n BindingSource object heeft VB automatisch aangemaakt toen je
de tekstvakken aan de dataset koppelde via Databinding. Het object heet
NawGegevensBindingSource.
Een BindingSource object houdt van de dataset die hij aan de objecten koppelt een aantal
zaken bij. Onder andere welk record het huidige, oftewel actieve, record van die dataset is.
De code
NawgegevensBindingSource.MoveNext()
geeft NawgegevensBindingSource opdracht om in de dataset naar het record met het
volgend hogere nummer te gaan. Dus bij voorbeeld van record 1 naar record 2.
Tijd om te testen.
1. Klik op het Start driehoekje.
2. Klik op de Volgende knop.
Het tweede record in profielkeuzesDataSet verschijnt.
3. Sluit je project.
Het nummer van het huidige record tonen
Natuurlijk is het wel handig om te weten welk record van de database je ziet. Daarom
gebruik je een stukje code dat in lblRecords de tekst zo instelt dat het label het nummer van
het huidige record laat zien, gevolgd door het aantal records in de dataset. Dus als je het
tweede record van de 3 records in de dataset ziet, is dat 2 van 3.
Bij het opstarten van je project en telkens wanneer er een ander record het huidige record
wordt, moet de tekst van lblRecords worden aangepast. Dus bij het laden van het form en
na het klikken op elke navigatieknop. Het is niet handig om dezelfde code op meerdere
plekken te gebruiken. Teveel code, teveel kans op fouten, en als je de code een keer wilt
aanpassen, wil je dat niet op meerdere plaatsen moeten doen. In plaats daarvan maak je
een subroutine die je vanuit de code bij elke navigatieknop aanroept. Deze subroutine
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 33
noem je NawgegevensBindingSourcePositionChanged. De naam geeft, weliswaar in
het Engels, precies aan wanneer deze subroutine moet worden aangeroepen; namelijk
wanneer in NawgegevensBindingSource de waarde van de eigenschap position van de
huidige record verandert.
De code is als volgt:
lblRecords.Text = (NawgegevensBindingSource.Position + 1).ToString & "
van " & NawgegevensBindingSource.Count.ToString
Je vraagt je af wat dat betekent? Een stukje uitleg is hier wel op zijn plaats.
De eigenschap text van het object lblRecords wordt ingesteld. Dat doe je door 3 stukjes
tekst aan elkaar te plakken met & en het resultaat toe te wijzen aan lblRecords.text.
Eerst haal je het nummer van het huidige record op. Dit wordt geleverd door
NawgegevensBindingSource.Position. Computers tellen vanaf 0, dus als het huidige record
het derde in de dataset is, heeft dat record nummer 2 (0,1,2). Daarom tel je er 1 bij op met
+ 1, omdat mensen nu eenmaal vanaf 1 tellen, en de gebruikers van je programma
verwachten dat het derde record nummer 3 heeft, en niet 2. Tenslotte zet je met ToString
dit getal 3 om naar de letter 3 omdat een label immers alleen tekst kan tonen, geen
getallen. Dus:
(NawgegevensBindingSource.Position + 1).ToString
Dan wordt de tekst van, voorafgegaan en gevolgd door een spatie aan het voorafgaande
geplakt. Dit gaat simpelweg met het & teken gevolgd door dubbele aanhalingstekens
(begin van een string), dan een spatie, het woordje van, weer een spatie en weer dubbele
aanhalingstekens om de string af te sluiten en weer het teken &. Dus:
& " van " &
NawgegevensBindingSource.Count geeft het aantal records in de BindingSource terug.
Dit zet je met ToString om naar een string en plakt het met het plusteken aan wat je al
had.
NawgegevensBindingSource.Count.ToString
Een subroutine maken
1. Maak onder de subroutine btnVolgende_Click , maar vóór End Class, een nieuwe
private subroutine NawgegevensBindingSourcePositionChanged().
2. Type de code voor deze subroutine zoals hieronder.
Let op! Type de hele code van de subroutine achter elkaar op 1 regel. Dus NIET
zoals hieronder verdeeld over meerdere regels! Afhankelijk van de instellingen van
VB 2008 op jouw computer wordt de code zichtbaar op 1 of meerdere regels.
Private Sub NawgegevensBindingSourcePositionChanged()
lblRecords.Text = (NawgegevensBindingSource.Position + 1).ToString & "
van " & NawgegevensBindingSource.Count.ToString
End Sub
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 34
Nu de subroutine klaar is, kun je hem aanroepen vanuit andere subroutines in dit formulier.
Om te beginnen de subroutine btnVolgende_Click.
1. Voeg aan de code in de subroutine btnVolgende_Click de volgende regel toe:
NawgegevensBindingSourcePositionChanged()
De subroutine ziet er dan als volgt uit:
Private Sub btnVolgende_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnVolgende.Click
NawgegevensBindingSource.MoveNext()
NawgegevensBindingSourcePositionChanged()
End Sub
Nu moet hetzelfde nog gebeuren bij de Form1_Load subroutine:
2. Voeg de volgende tekst toe aan het eind van de Form1_Load subroutine:
NawgegevensBindingSourcePositionChanged()
De subroutine ziet er dan als volgt uit:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the
'ProfielkeuzesDataSet.nawgegevens' table. You can move, or remove it, as needed.
Me.NawgegevensTableAdapter.Fill(Me.ProfielkeuzesDataSet.nawgegevens)
NawgegevensBindingSourcePositionChanged()
End Sub
Tijd om te testen of alles werkt.
1. Start je programma.
Je ziet in lblRecords de tekst 1 van 3.
2. Blader naar het volgende record door op de Volgende knop te klikken.
Je ziet in lblRecords de tekst 2 van 3. Succes !!!!
3. Sluit je project.
Naar het vorige record bladeren
De resterende navigatieknoppen zijn nu niet meer moeilijk. Eerst de vorige knop.
Je gebruikt dezelfde code als bij de volgende knop, alleen wordt het nummer van het
record nu niet met 1 verhoogd, maar met 1 verlaagd, oftewel je gaat naar het vorige record
in de dataset.
1. Dubbelklik op de Vorige knop om een subroutine voor het Click event aan te maken.
2. Kopieer de code van de btnVolgende_Click subroutine naar de btnVorige_Click
subroutine.
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 35
3. Verander MoveNext() in MovePrevious().
Private Sub btnVorige_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnVorige.Click
NawgegevensBindingSource.MovePrevious()
NawgegevensBindingSourcePositionChanged()
End Sub
4. Testen maar!
Naar het eerste record bladeren
En dan nog de subroutines bij de Eerste en Laatste knoppen.
De code voor de subroutine bij de Eerste knop is als volgt:
NawgegevensBindingSource.MoveFirst()
NawgegevensBindingSourcePositionChanged()
Naar het laatste record bladeren
En de code van de Laatste knop is:
NawgegevensBindingSource.MoveLast()
NawgegevensBindingSourcePositionChanged()
1. Maak de Click subroutines voor de Eerste en Laatste knoppen.
Private Sub btnEerste_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnEerste.Click
NawgegevensBindingSource.MoveFirst()
NawgegevensBindingSource.Count.ToString()
End Sub
Private Sub btnLaatste_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnLaatste.Click
NawgegevensBindingSource.MoveLast()
NawgegevensBindingSourcePositionChanged()
End Sub
2. Test alle knoppen uit en verbeter waar nodig.
Voorkomen dat je buiten de dataset probeert te komen
De knoppen werken prima, maar toch ben je nog niet klaar. Want stel je voor dat het
huidige record het eerste record is, en de gebruiker van je programma klikt op de knop
Vorige. Dan zou de BindingSource nog 1 record terug moeten gaan, en dat is er niet. Om
foutmeldingen te voorkomen moet je dus, voordat je in de dataset ergens naar toe beweegt
controleren of je daar wel naar toe kunt.
Je gebruikt bij de Vorige knop een If – then constructie. Als het huidige record niet het
eerste record is, dus als de positie hoger is dan nul, dan ga je een record terug.
If NawgegevensBindingSource.Position > 0 Then
De code in het btnVorige_Click event wordt dan:
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 36
Private Sub btnVorige_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnVorige.Click
If NawgegevensBindingSource.Position > 0 Then
NawgegevensBindingSource.MovePrevious()
NawgegevensBindingSourcePositionChanged()
End If
End Sub
En ook bij de Volgende knop moet je zo’n controle inbouwen. Als de huidige positie kleiner
is dan het aantal records min 1, dan ga je een record vooruit.
If NawgegevensBindingSource.Position < NawgegevensBindingSource.Count - 1
Then
Waarom min 1? Omdat position telt vanaf nul, dus bijvoorbeeld het derde record heeft
positienummer 2 Count werkt anders; count geeft het aantal records weer. Dus bij 3
records is het count aantal 3. Om het nummer van het laatste record te krijgen moet het
count aantal dus met 1 worden verlaagd. De code wordt:
Private Sub btnVolgende_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnVolgende.Click
If NawgegevensBindingSource.Position < NawgegevensBindingSource.Count - 1
Then
NawgegevensBindingSource.MoveNext()
NawgegevensBindingSourcePositionChanged()
End If
End Sub
1. Pas de code in de beide event handlers aan zoals hierboven staat afgebeeld.
Gegevens wijzigen
Je kunt nu gegevens in een dataset laden en door de records bladeren. Maar je wilt ook de
gegevens kunnen veranderen.
1.
2.
3.
4.
Ga naar een willekeurig record.
Verander het telefoonnummer.
Blader naar een ander record.
Blader weer terug naar het record waarin je het telefoonnummer hebt gewijzigd.
Je ziet dat het veld telefoonnummer nog steeds de gewijzigde waarde bevat. De
wijzigingen worden in de dataset bewaard wanneer je naar een ander record bladert. Dat
betekent dat je niet na elke wijziging de gegevens in het record hoeft op te slaan. Maar let
op! De wijzigingen zijn alleen in de dataset doorgevoerd. Nog niet in de database op schijf.
Dat heb je in hoofdstuk 1 ook al gezien. Om de wijzigingen ook in de onderliggende
database door te voeren moet er nog een extra handeling gebeuren. Dit leer je verderop in
dit hoofdstuk.
Wijzigingen in het huidige record annuleren
Wanneer je in een record gegevens aan het wijzigen bent, maar je bedenkt je en wilt de
wijzigingen in het huidige record annuleren, dan kun je de oude waarden herstellen door op
de knop Wijzigingen in huidige record annuleren te klikken.
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 37
De code achter deze knop is als volgt:
NawgegevensBindingSource.CancelEdit()
NawgegevensBindingSource krijgt de opdracht om het aanpassen van de gegevens van
het huidige record te stoppen en de wijziging(en) te annuleren.
1. Dubbelklik op de knop btnAnnuleer om de subroutine btnAnnuleer_Click te
genereren.
2. Plaats de bovenstaande code in de subroutine btnAnnuleer_Click.
3. Test of de subroutine goed werkt en verbeter eventueel.
Wijzigingen in meerdere records annuleren
Ook wijzigingen in andere records kunnen worden geannuleerd zolang ze nog niet naar de
database zijn weggeschreven. Dit gaat met de code onder de knop Alle wijzigingen
annuleren.
De code is als volgt:
ProfielkeuzesDataSet.RejectChanges()
De code is erg eenvoudig en geeft ProfielkeuzesDataset de opdracht alle wijzigingen te
annuleren. Dit kan omdat een dataset niet alleen bijhoudt in welke records wijzigingen zijn
geweest maar ook wat de oude en nieuwe waarden zijn. De recordset plaatst alle oude
waarden weer terug. Een aanroep van de subroutine
NawgegevensBindingSourcePositionChanged() is hier overbodig omdat je niet van record
wisselt.
1. Genereer de subroutine btnAnnuleerAlle_Click door op de knop Alle wijzigingen
annuleren te dubbelklikken.
2. Plaats de bovenstaande code in de subroutine.
3. Test of de subroutine goed werkt en verbeter eventueel.
Een nieuw record aanmaken
Onder de knop btnVoegrecordToe toe komt de code om een nieuw record aan de dataset
toe te voegen. De code is als volgt:
Private Sub btnVoegRecordToe_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnVoegRecordToe.Click
Try
NawgegevensBindingSource.EndEdit()
NawgegevensBindingSource.AddNew()
NawgegevensBindingSourcePositionChanged()
Catch
MsgBox("Kan geen record toevoegen.")
End Try
End Sub
1. Dubbelklik op de knop btnVoegRecordToe om de Click subroutine te genereren.
2. Type de grijs gemarkeerde code in de subroutine precies zo als hierboven.
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 38
Try – Catch – End try
De Try – Catch – End Try constructie is een vorm van foutafvanging. Mocht er tijdens het
uitvoeren van de code iets verkeerd gaan, dan komt er een mededeling in de messagebox
die de gebruiker vertelt dat het niet gelukt is om een nieuw, leeg record aan te maken.
In het Try-gedeelte staat de gewone code van de subroutine. Dus wat er gebeurt als alles
goed gaat. Als eerste wordt een eventueel lopende edit operatie beëindigd. Bijvoorbeeld
wanneer je in een record gegevens hebt gewijzigd, maar nog niet naar een ander record
bent gegaan, en dan op de knop Voeg record toe klikt. De wijzigingen worden dan eerst
netjes doorgevoerd in de dataset voordat er een nieuw record wordt gemaakt. Vergeet je
deze regel, dan gaat er niets fout, want voordat de BindingSource een nieuw record maakt
controleert hij zelf ook of er misschien nog een edit gaande is en sluit het eventueel af,
maar het is natuurlijk wel zo netjes om zelf eventuele fouten af te handelen.
Daarna wordt er door NawgegevensBindingSource in de dataset die hij beheert, dus in
ProfielkeuzesDataSet, een nieuw, leeg record aangemaakt. Leeg? Er staat toch al een
nieuw id-nummer ingevuld? Ja, inderdaad. Dat komt omdat het veld id in de database een
sleutelveld is van het type Autonummering. Zo’n veld moet per se een uniek nummer
bevatten en de dataset heeft dat automatisch aangemaakt.1 Omdat de dataset niet zeker
weet welk nummer in de onderliggende database het volgende vrije nummer is gebruikt het
voorlopig -1. Dat nummer is zeker nog niet bezet, want het wordt nooit gebruikt in de
database. Bij het wegschrijven van de gegevens van het nieuwe record naar de database
wordt dan automatisch -1 verwijderd en het eerstvolgende vrije nummer in het veld id
ingevuld.
De andere velden zijn nog leeg. Je kunt nu gegevens invullen. Het veld Profiel is een
verplicht veld, en daar moet dus wat ingevuld worden. Als je een verplicht veld niet invult
kan het nieuwe record niet worden weggeschreven naar de onderliggende database en
volgt er een foutmelding. In het hoofdstuk over validatie leer je hoe je de gebruikers van je
programma kunt “dwingen” bepaalde gegevens in te vullen. De gegevens van het nieuwe
record worden in de dataset opgenomen zodra je naar een ander record navigeert. Ze
staan dan nog niet in de onderliggende database. Daar worden ze pas naar toe geschreven
zodra de gebruiker op de knop Alle wijzigingen opslaan klikt.
Als laatste roept de code weer de subroutine NawgegevensBindingSourcePositionChanged
aan om de tekst in lblRecords aan te passen.
Het Catch-gedeelte bepaalt wat er gebeurt als er iets misgaat bij het aanmaken van het
nieuwe record.
MsgBox("Kan geen record toevoegen.")
Het Catch gedeelte wacht of het (operating) systeem een foutmelding stuurt. Dit gebeurt
bijvoorbeeld wanneer het systeem geen nieuwe record kan aanmaken. Wanneer Catch
zo’n melding ontvangt, dan stopt de uitvoering van de code in het Try gedeelte en wordt de
foutmelding opgevangen en kan worden getoond. Maar deze foutmeldingen zijn vaak voor
gewone gebruikers onbegrijpelijk en je kunt dan ook vaak beter zelf een melding in een
messagebox tonen.
1
Trouwens, een eenmaal gemaakt en daarna verwijderd nummer wordt nooit meer opnieuw gegenereerd.
Het kan wel “handmatig” in de database zelf worden ingevuld.
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 39
End Try sluit het Try - Catch - End Try gedeelte af.
Een record verwijderen
Wat moet de code achter deze knop doen? Wel, om het netjes te doen moet je eerst
controleren of er wel een record in de dataset zit. Als je immers uit een lege dataset een
record probeert te verwijderen, loopt het mis. Dus heb je eerst een if … then constructie
nodig die test of het aantal records in de dataset wel groter is dan 0.
If NawgegevensBindingSource.Count > 0 Then
En als het aantal records inderdaad groter is dan nul, moet het huidige record uit de dataset
worden verwijderd.
NawgegevensBindingSource.RemoveCurrent()
Dan vertel je de BindingSource dat je klaar bent met het aanpassen (edit) van de dataset.
NawgegevensBindingSource.EndEdit()
En tenslotte moet de tekst in lblRecords nog aangepast worden. Wanneer de huidige
record is verwijderd, kom je immers vanzelf op een ander record terecht. En wel het record
vóór het net verwijderde record. Dus voeg je de aanroep van de subroutine
NawgegevensBindingSourcePositionChanged nog toe.
NawgegevensBindingSourcePositionChanged()
In het Catch gedeelte voeg je weer een messagebox met toepasselijke tekst toe.
1. Dubbelklik op btnVerwijder knop om de click subroutine aan te maken.
2. Voeg de benodigde code toe.
De hele subroutine ziet er dan als volgt uit:
Private Sub btnVerwijder_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnVerwijder.Click
Try
If NawgegevensBindingSource.Count > 0 Then
NawgegevensBindingSource.RemoveCurrent()
NawgegevensBindingSource.EndEdit()
NawgegevensBindingSourcePositionChanged()
End If
Catch
MsgBox("Kan record niet verwijderen.")
End Try
End Sub
3. Test de nieuwe code.
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 40
De wijzigingen in de dataset opslaan in de onderliggende database
Alle wijzigingen die tot nu toe zijn gemaakt, zijn alleen doorgevoerd in de dataset. Dit zijn
de gegevens die je bij het laden van je form vanuit de achterliggende database naar
ProfielkeuzesDataSet hebt geladen en daarna in je formulier hebt gebruikt. Dit is een kopie
van de gegevens in de database op schijf. De originele, ongewijzigde gegevens staan nog
steeds in de database op schijf. In vorige versies van Visual Basic werden alle wijzigingen
in de dataset onmiddellijk bijgewerkt in de database op schijf. Bij VB.NET is dit standaard
niet zo. Wijzigingen worden alleen bijgehouden in de dataset. Het bijwerken in de database
gebeurt later. Dit is gedaan om het dataverkeer tussen de dataset in je formulier en de
database op schijf te beperken. Hier wordt je programma sneller van, zeker als je formulier
een webpagina is en al het dataverkeer via het internet gaat. Het nadeel is wel dat je er om
moet denken de wijzigingen in de dataset bij te werken in de database op schijf.
Om het dataverkeer tussen je formulier en de database op schijf zo klein mogelijk te
houden heeft Microsoft nog iets slims bedacht. Je formulier stuurt niet de hele dataset,
inclusief wijzigingen terug naar de database op schijf, maar alleen de gewijzigde records.
Die overschrijven dan de desbetreffende records in de database op schijf.
NawgegevensBindingSource heeft keurig bijgehouden in welke records iets is gewijzigd.
Bij de records die gewijzigd zijn en waarbij het aanpassen is beëindigd, bij voorbeeld
doordat de gebruiker naar een andere record is gegaan, is de eigenschap RowState
veranderd in modified (aangepast). En alleen records met een RowState modified worden
naar de onderliggende database weggeschreven.
Er is één situatie die mogelijk roet in het eten kan gooien. En wel als de gebruiker iets heeft
gewijzigd in het huidige record en daarna niet meer naar een ander record is gegaan. De
eigenschap RowState van dit laatst gewijzigde record is dan nog niet modified. Zo zou
deze laatste wijziging niet meegenomen worden bij het opslaan. Om dit toch af te dwingen
voeg je aan het begin van de code een extra regel toe die er voor zorgt dat de edit operatie
wordt afgesloten en de eigenschap RowState van het laatste record toch wordt veranderd
in modified:
NawgegevensBindingSource.EndEdit()
In het begin van dit hoofdstuk, onder het kopje Gegevens ophalen heb je al gelezen dat je
voor het ophalen en wegschrijven van gegevens bepaalde commando’s nodig hebt. Deze
commando’s bevinden zich in een zogenaamde TableAdapter, ook wel DataTableAdapter
genoemd. Je kunt een TableAdapter opdracht geven om het commando om alle
veranderingen in de dataset naar de onderliggende database weg te schrijven uit te voeren.
Dit gaat met Update(). De TableAdapter in dit project is bij het aanmaken van de
BindingSource automatisch is gemaakt en heet NawgegevensTableAdapter.
1. Kijk onder in het design scherm.
Je ziet dan de TableAdapter NawgegevensTableAdapter.
De code om de NawgegevensTableAdapter zijn Update (werk bij) commando uit te laten
voeren is:
NawgegevensTableAdapter.Update(ProfielkeuzesDataSet)
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 41
Een TableAdapter kan commando’s voor meerdere datasets bevatten. Vandaar dat tussen
haakjes vermeld staat welke dataset moet worden geüpdate.
En tenslotte moet je de dataset laten weten dat alle aanpassingen inmiddels zijn
opgeslagen en dat hij ze niet meer als aanpassingen mag onthouden.
ProfielkeuzesDataSet.AcceptChanges()
Natuurlijk moet je ook nog controleren of het bijwerken gelukt is, en als dat niet zo is, de
gebruiker waarschuwen. Dat gaat weer met een Try – Catch – End Try constructie.
1. Genereer een subroutine btnOpslaan_Click door te dubbelklikken op de btnOpslaan
knop.
2. Pas de code als volgt aan:
Private Sub btnOpslaan_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnOpslaan.Click
Try
NawgegevensBindingSource.EndEdit()
NawgegevensTableAdapter.Update(ProfielkeuzesDataSet)
ProfielkeuzesDataSet.AcceptChanges()
Catch
MsgBox("Het opslaan is niet gelukt.")
End Try
End Sub
3. Controleer of de code goed werkt en breng eventueel verbeteringen aan.
Hoofdstuk 2 Een Windows programma met een database zelf bouwen
317495951
Pagina 42
Hoofdstuk 3 Databases en SQL
Dit hoofdstuk gaat over databases en SQL. Je gaat eerst even kijken wat een database is
en hoe zo’n database in elkaar zit. Daarna krijg je uitleg over SQL, een taal waarmee je de
gegevens in een database kunt selecteren en bewerken. En je gaat al direct praktisch aan
de slag met het programma SQLOefenaar, een programma dat je laat oefenen met SQL.
Databases
Tabellen, records en velden
Een database is een verzameling gegevens die op een bepaalde manier is geordend. Een
voorbeeld van een database is de verzameling gegevens die een school van haar
leerlingen heeft. Omdat een database veel verschillende gegevens bevat, zijn die gegevens
meestal verdeeld over meerdere tabellen. Zo’n tabel kun je vergelijken met een kaartenbak.
Bij een school zouden dit bijvoorbeeld de tabellen leerlinggegevens en profielgegevens
kunnen zijn. Tabellen hebben records. Zeg maar kaarten. Zo is er voor elke leerling in de
tabel leerlinggegevens een record. En elk record is ten slotte weer opgebouwd uit een
aantal velden, zoals naam, adres enzovoort.
Een voorbeeld van een papieren database met één tabel:
naam: Harry
Een tabel
Een tabel bevat allemaal
records met de zelfde soort
gegevens.
Bijvoorbeeld een bak met
kaarten met de
leerlinggegevens.
Een record
Een record heeft velden
voor de verschillende
gegevens.
Bijvoorbeeld een kaart met
de gegevens van 1
leerling.
Een veld
Een veld is een
onderdeel van een
record waar je 1
gegeven invult.
Bijvoorbeeld naam.
De meeste databases hebben meer dan 1 tabel en zitten zo in elkaar dat de gegevens in
de verschillende tabellen aan elkaar gekoppeld kunnen worden. Kijk maar eens naar de
volgende eenvoudige praktijksituatie.
Hoofdstuk 3 Databases en SQL
Pagina 43
Een administratie van een school heeft besloten om gegevens van leerlingen in een digitale
database te stoppen. In die database komen de naw-gegevens (naam, adres en
woonplaats) van de leerlingen te staan en ook de profielen die de leerlingen volgen met de
vakken die bij deze profielen horen. Het moderne voortgezet onderwijs havo/vwo kent in de
zogenaamde tweede fase 4 profielen, te weten de profielen Cultuur en Maatschappij,
afgekort als CM, Economie en Maatschappij, afgekort als EM, Natuur en Gezondheid,
afgekort als NG en Natuur en Techniek, afgekort als NT.
CM heeft de vakken wiskunde, geschiedenis en tekenen.
EM heeft de vakken wiskunde, economie en aardrijkskunde.
NG heeft de vakken wiskunde, scheikunde en biologie.
NT heeft de vakken wiskunde, scheikunde en natuurkunde.
Stel je voor dat de school slechts 6 leerlingen heeft. De administratie zou kunnen besluiten
om voor de leerlinggegevens een database met daarin een tabel met de volgende records
te gaan maken:
naam: Jan
profiel:CM
vak1: wiskunde
vak2: geschiedenis
vak3: tekenen
naam: Piet
profiel:EM
vak1: wiskunde
vak2: economie
vak3: aardrijkskunde
naam: Klaas
profiel:NT
vak1: wiskunde
vak2: scheikunde
vak3: natuurkunde
naam: Nelleke
profiel:NT
vak1: wiskunde
vak2: scheikunde
vak3: natuurkunde
naam: Harry
profiel:NT
vak1: wiskunde
vak2: scheikunde
vak3: natuurkunde
naam: Harry.
profiel:EM
vak1: wiskunde
vak2: economie
vak3: aardrijkskunde
De tabel heeft 5 velden: naam, profiel, vak1, vak2 en vak3.
Sleutelveld
Er blijken op deze school 2 Harry’s te zijn, gelukkig wel met verschillende profielen. Maar
het zou kunnen voorkomen dat er meerdere leerlingen met dezelfde naam hetzelfde profiel
hebben. Het wordt dan onmogelijk om ze te onderscheiden. Om alle mogelijke
misverstanden te vermijden besluit de administratie aan elke leerling een uniek nummer te
koppelen, het zogenaamde id-nummer, een soort Sofi- of burgerservicenummer. Zo’n veld
waar elke waarde uniek moet zijn heet een sleutelveld. Id is een sleutelveld, want er
kunnen niet twee leerlingen zijn met hetzelfde id. De records in de tabel komen er dan als
volgt uit te zien:
Hoofdstuk 3 Databases en SQL
Pagina 44
id: 1
naam: Jan
profiel:CM
vak1: wiskunde
vak2: geschiedenis
vak3: tekenen
id: 2
naam: Piet
profiel:EM
vak1: wiskunde
vak2: economie
vak3: aardrijkskunde
id:3
naam: Klaas
profiel:NT
vak1: wiskunde
vak2: scheikunde
vak3: natuurkunde
id:4
naam: Nelleke
profiel:NT
vak1: wiskunde
vak2: scheikunde
vak3: natuurkunde
id: 5
naam: Harry
profiel:NT
vak1: wiskunde
vak2: scheikunde
vak3: natuurkunde
id: 6
naam: Harry.
profiel:EM
vak1: wiskunde
vak2: economie
vak3: aardrijkskunde
Bij 20 leerlingen zouden er nu 20 x 6 = 120 gegevens moeten worden ingevoerd.
id
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
naam
Jan
Piet
Klaas
Nelleke
Harry
Harry
Iwan
Nelleke
Nelleke
Natasja
Alie
Jaap
Erik
Erica
Ali
Kees
Jens
Karel
Alexia
Asma
profiel
CM
EM
NT
NT
NT
NG
NT
CM
NT
CM
NT
CM
NG
NG
EM
EM
CM
CM
EM
CM
vak1
wiskunde
wiskunde
wiskunde
wiskunde
wiskunde
wiskunde
wiskunde
wiskunde
wiskunde
wiskunde
wiskunde
wiskunde
wiskunde
wiskunde
wiskunde
wiskunde
wiskunde
wiskunde
wiskunde
wiskunde
vak2
geschiedenis
economie
scheikunde
scheikunde
scheikunde
scheikunde
scheikunde
geschiedenis
scheikunde
geschiedenis
scheikunde
geschiedenis
scheikunde
scheikunde
economie
economie
geschiedenis
geschiedenis
economie
geschiedenis
vak3
tekenen
aardrijkskunde
natuurkunde
natuurkunde
natuurkunde
biologie
natuurkunde
tekenen
natuurkunde
tekenen
natuurkunde
tekenen
biologie
biologie
aardrijkskunde
aardrijkskunde
tekenen
tekenen
aardrijkskunde
tekenen
Gegevens verdelen over meerdere tabellen
Als je even kritisch kijkt zie je dat aan een profiel telkens dezelfde vakken gekoppeld zijn.
Dat is telkens dezelfde informatie en die is dus overbodig. Het ontwerp wordt beter
wanneer je de gegevens verdeelt over twee tabellen. Deze tabellen worden door één
gemeenschappelijk veld gekoppeld. Het veld waarmee je de tabellen gaan koppelen is
profiel. Er ontstaan nu twee tabellen, de ene tabel noemen je leerlingen en de andere
tabel noemen je profielen. Ze zien er als volgt uit.
Hoofdstuk 3 Databases en SQL
Pagina 45
De tabel leerlingen
id
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
naam
Jan
Piet
Klaas
Nelleke
Harry
Harry
Iwan
Nelleke
Nelleke
Natasja
Alie
Jaap
Erik
Erica
Ali
Kees
Jens
Karel
Alexia
Asma
profiel
CM
EM
NT
NT
NT
NG
NT
CM
NT
CM
NT
CM
NG
NG
EM
EM
CM
CM
EM
CM
En de tabel profielen.
profiel
CM
EM
NG
NT
vak1
wiskunde
wiskunde
wiskunde
wiskunde
vak2
geschiedenis
economie
scheikunde
scheikunde
vak3
tekenen
aardrijkskunde
biologie
natuurkunde
Door de oorspronkelijke tabel te splitsen hoef je nog maar 3x20 + 4x4 = 76 gegevens in te
voeren. Bij duizenden leerlingen wordt de winst nog veel groter. En als je later een wijziging
in de samenstelling van een profiel wilt doorvoeren, wil je die niet in honderden records
doen, maar in slechts 1.
Hoofdstuk 3 Databases en SQL
Pagina 46
Tabellen koppelen
Als je wilt weten welke vakken leerling Kees heeft, moet je in de tabel leerlingen opzoeken
welk profiel Kees heeft en vervolgens in de tabel profielen de vakken aflezen die bij dat
profiel horen.
id
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
naam
Jan
Piet
Klaas
Nelleke
Harry
Harry
Iwan
Nelleke
Nelleke
Natasja
Alie
Jaap
Erik
Erica
Ali
Kees
Jens
Karel
Alexia
Asma
profiel
CM
EM
NT
NT
NT
NG
NT
CM
NT
CM
NT
CM
NG
NG
EM
EM
CM
CM
EM
CM
profiel
CM
EM
NG
NT
vak1
wiskunde
wiskunde
wiskunde
wiskunde
vak2
geschiedenis
economie
scheikunde
scheikunde
vak3
tekenen
aardrijkskunde
biologie
natuurkunde
Relaties en relationele database
Er is dus een relatie tussen het veld profiel in de tabel leerlingen en het veld profiel in de
tabel profielen.
De tabellen en de relaties tussen de velden kun je tonen in een zogenaamd
strokendiagram:
leerlingen
profielen
id
naam
profiel
vak1
profiel
vak2
vak3
In het bovenstaande strokendiagram staat links de naam van de tabel. Van elke tabel wordt
het sleutelveld aangegeven door middel van een horizontale pijl met dubbele kop. De
relatie tussen de velden in de twee tabellen wordt aangeduid door de andere pijl.
Zo’n database waarin er relaties bestaan tussen tabellen heet een relationele database.
Tot zover de uitleg over hoe de gegevens in een database zijn georganiseerd.
Hoofdstuk 3 Databases en SQL
Pagina 47
Een nieuwe database maken met Microsoft Access 2007
Je kunt heel gemakkelijk een tabel aanmaken in Access 2007.
1. Start Microsoft Access 2007 en klik op Lege database.
Rechts in beeld verschijn een tekstveld waarin je de naam van de nieuwe database kunt
opgeven. Je kunt zien dat in versie 2007 van Access de extensie accdb (accessdatabase)
is, en niet zoals in versie 2003 mdb (microsoft database).
2. Geef de database de naam test.accdb.
Dan kies je waar je de nieuwe database neerzet. In dit voorbeeld maakt het niet uit waar dit
is. Als je niets beters kunt bedenken gebruik dan de map c:\vb2008metdatabases.
3. Klik op het gele mapje naast het tekstvak met de naam en kies een map.
4. Klik op OK.
5. Klik op Maken.
Er wordt een nieuwe, lege database aangemaakt. Deze bevat 1 lege tabel die tabel1 heet.
Je kunt de tabel bewerken in de ontwerpweergave.
6. Klik links boven in het beeld op Weergave - ontwerpweergave.
7. Geef de tabel de naam personen.
8. Klik op OK.
Velden toevoegen aan een tabel
Het eerste veld is al gemaakt. Het heet Id, heeft het gegevenstype autonummering en is
voorzien van een primaire sleutel. Dat wil zeggen dat het een sleutelveld is.
Zoals eerder gezegd, elk gegeven in een sleutelveld moet uniek zijn. Ook moet er per se
iets worden ingevuld. Een sleutelveld mag dus niet leeg zijn. Wil je bij een veld de sleutel
verwijderen, dan selecteer je het veld en klik je op het sleutelicoontje klikken. Maar dat is nu
niet nodig.
Je kunt een nieuw veld aan de tabel toevoegen door in de kolom Veldnaam in het tekstvak
onder Id de naam van dat nieuwe veld te typen.
1. Maak een nieuw veld genaamd Naam.
Hoofdstuk 3 Databases en SQL
Pagina 48
Rechts naast de veldnaam kies je in de tabel Gegevenstype het gegevenstype van het
nieuwe veld.
2. Kies in de kolom Gegevenstype het gegevenstype Tekst.
3. Voeg nog een nieuw veld toe genaamd Profiel, van het gegevenstype Tekst.
Het geheel ziet er als volgt uit:
Je hebt een nieuwe database gemaakt en een aantal velden toegevoegd aan een tabel.
Dat is voor nu wel even genoeg.
1. Sluit Access.
Structured Query Language
Eenvoudige queries
Wanneer een database veel gegevens bevat wordt het lastig om het overzicht te houden.
Met behulp van de ‘vraagtaal’ Structured Query Language, afgekort SQL, kun je gegevens
uit de tabellen selecteren. De twee belangrijkste mogelijkheden van SQL zijn:


gegevens opvragen. Je selecteert, via SQL, die gegevens die je op dat moment wilt
zien.
gegevens veranderen. Met SQL kun je gegevens aan je database toevoegen,
wijzigen of verwijderen.
SELECT … FROM … WHERE
SQL is een taal met een vaste structuur. De structuur voor het opvragen van gegevens uit
de database is als volgt:
SELECT ( welke velden wil je zien?)
FROM
(in welke tabel(len) wil je zoeken?)
WHERE (aan welke criteria moeten de gegevens voldoen?)
Zo’n stukje SQL als hierboven heet een query.
Een voorbeeld:
Query 1
Je wilt weten welk profiel leerling Kees heeft. De query die je de juiste gegevens bezorgd is
dan:
Hoofdstuk 3 Databases en SQL
Pagina 49
SELECT profiel
FROM leerlingen
WHERE naam=’Kees’
En je krijgt als resultaat:
EM
Query 2
En wanneer je wilt weten welke profielen de leerlingen met als voornaam Harry hebben
wordt de query:
SELECT profiel
FROM leerlingen
WHERE naam=’Harry’
Met als resultaat de lijst:
NG
NT
Query 3
Je kunt ook gegevens uit meerdere velden selecteren. Kijk maar eens naar de volgende
query.
SELECT id, naam, profiel
FROM leerlingen
WHERE naam=’Harry’
Het resultaat is nu:
5
6
Harry
Harry
NT
NG
Query 4
Met een sterretje geef je aan dat je alle velden van de tabel opvraagt. Het * teken kun je
zien als een soort joker teken. Bij het kaartspel jokeren mag je de joker ook als iedere
andere kaart gebruiken.
SELECT *
FROM leerlingen
WHERE naam=’Harry’
Deze query retourneert alle velden in de tabel leerlingen van iedereen die als naam ‘Harry’
heeft. De uitkomst is dezelfde als bij de vorige query.
Er zijn kennelijk twee leerlingen met de naam Harry die een verschillend profiel hebben.
Query 5
Zou je de gehele tabel, dus alle velden van iedereen in de tabel leerlingen willen opvragen,
dan gebruik je de query:
SELECT *
Hoofdstuk 3 Databases en SQL
Pagina 50
FROM leerlingen
Oefenen met SQLOefenaar
Gesnapt? Of toch nog even oefenen? Bij dit hoofdstuk hoort een programma genaamd
SQLOefenaar waarmee je de query's van dit hoofdstuk kunt oefenen.
Je vindt het bestand SQLOefenaar.exe en de bijbehorende database keuzepakket.accdb
in de map waarin je de bij dit boek behorende bestanden hebt gezet. Als je de instructies in
hoofdstuk 1 gevolgd hebt, is dit c:\vb2008metdatabases.
1. Zoek in de verkenner de map met SQLOefenaar.exe op en dubbelklik op
SQLOefenaar.exe.
2. Kik op de knop Laad database en selecteer in map c:\vb2008metdatabases de
database keuzepakket.accdb.
3. Klik op Openen.
4. Klik op de knop Voer query uit.
Je ziet het onderstaande:
Je ziet links boven in beeld een aantal selectievakjes en comboboxen om een query mee
samen te stellen. Zodra je op de knop Voer query uit klikt, zie je in het tekstvak links
onderaan de tekst van de query zoals jij die hebt samengesteld, en verschijnt in het
datagrid rechts bovenaan het resultaat van de query. In de tekstvakken daaronder zie de
gegevens van het eerste record van de opgehaalde records.
1. Voer de query’s die hiervoor staan uit en kijk naar de resultaten.
Hoofdstuk 3 Databases en SQL
Pagina 51
Iets uitgebreidere query’s
ORDER BY
Maar met query’s kun je veel meer. Wanneer je de gegevens die je ophaalt alfabetisch wilt
sorteren op de inhoud van het veld id, gebruik dan ORDER BY:
SELECT id, naam, profiel
FROM leerlingen
WHERE naam= ‘Harry”
ORDER BY id ASC
ASC sorteert de opgehaalde gegevens in opklimmende volgorde, DESC in aflopende
volgorde.
1. Oefen deze en de volgende query's met de SQLOefenaar
In plaats van het veld te noemen mag je ook het nummer van het veld aangeven.
SELECT id, naam, profiel
FROM leerlingen
ORDER BY 2 ASC
Deze query laat de id, namen en profielen van de leerlingen in opklimmende volgorde zien,
gesorteerd naar het tweede geselecteerde veld, naam.
DISTINCT
De namen Harry en Nelleke komen meerdere keren voor. Om vaker voorkomende items
slechts 1 keer te tonen gebruik je DISTINCT. De query voor een lijst met alle namen, 1 keer
getoond en oplopend alfabetisch gesorteerd luidt:
SELECT DISTINCT naam
FROM leerlingen
ORDER BY naam ASC
(Als je dit probeert in de SQLOefenaar, vervang je naam door 1; het nummer van het veld
naam.)
Je hebt nu geoefend met een aantal woorden van SQL; SELECT, FROM, WHERE,
ORDER BY, ASC, DESC en DISTINCT. Met deze woorden kun je lijsten gegevens
opvragen uit één tabel. Maar zoals al eerder gezegd zitten bij elkaar horende gegevens
meestal verspreid over meerdere tabellen.
Het koppelen van de tabellen in SQL.
Vaak wil je gegevens uit meerdere tabellen combineren. Zo wil je bijvoorbeeld weten welke
vakken horen bij het profiel dat Kees volgt. Wanneer je gegevens uit meerdere tabellen wilt
opvragen moet je een koppeling tussen de beide tabellen aanbrengen.
Achter SELECT vermeld je zoals gewoonlijk de namen van de velden die je wilt zien. Let
op! Omdat in beide tabellen het veld profiel voorkomt, moet je vermelden van welke tabel je
Hoofdstuk 3 Databases en SQL
Pagina 52
het veld profiel wilt zien. Wanneer je het veld profiel uit de tabel leerlingen wilt zien, en dus
niet het veld profiel uit de tabel profielen, schrijf je: leerlingen.profiel. Dus:
SELECT id, naam, leerlingen.profiel, vak1, vak2, vak3
Achter FROM vermeld je welke velden van welke tabellen je aan elkaar wilt koppelen. Dit
gaat met het INNER JOIN … ON commando. De syntaxis van dit commando is als volgt:
FROM tabel1 INNER JOIN tabel2 ON tabel1.veld = tabel2.veld. Ofwel:
FROM profielen INNER JOIN leerlingen ON profielen.profiel = leerlingen.profiel
De hele query is dan:
SELECT id, naam, leerlingen.profiel, vak1, vak2, vak3
FROM profielen INNER JOIN leerlingen ON profielen.profiel = leerlingen.profiel
WHERE naam = ‘Kees’
Het resultaat is een overzicht van het id, de naam, het profiel en de 3 bijbehorende vakken,
keurig bij elkaar gezocht uit beide tabellen.
Oefeningen
Maak query’s die als resultaat precies die gegevens tonen die je nodig hebt om de
volgende vragen te kunnen beantwoorden.
1.
2.
3.
4.
5.
6.
7.
Welke vakken komen voor in het profiel CM ?
Welke profielen bestaan er waarvan het eerste vak wiskunde is ?
Welk profiel heeft als derde vak natuurkunde ?
Laat de profielen gerangschikt zien.
Laat alle profielen en vakken zien waarbij vak1 wiskunde is en rangschik naar vak3.
Laat vak1 en vak 3 zien van het profiel NG.
Laat vak 1 en vak 2 zien van het profiel EM.
Tenslotte
Je kunt ook query’s maken in Microsoft Access. Hierover de volgende korte uitleg:
1. Start Microsoft Access 2007 en laad de database keuzepakket.accdb. Als je
Access 2000 of 2003 gebruikt, laadt je keuzepakket.mdb. Deze bestanden vind je
in de map c:\vb2008metdatabases.
2. Klik eventueel linksboven op de tab Tabellen om de tabellen te zien.
Je kunt de tabellen leerlingen en profielen zien.
3.
4.
5.
6.
7.
Klik nu op de tab Maken.
Klik op Queryontwerp.
In het scherm Tabel weergeven zie je de tabellen leerlingen en profielen.
Selecteer leerlingen en klik op toevoegen.
Selecteer profielen en klik op toevoegen.
Je ziet beide tabellen en de relatie tussen de velden profiel in beide tabellen.
Hoofdstuk 3 Databases en SQL
Pagina 53
8. Klik op Sluiten.
9. Dubbelklik op * in de tabel leerlingen.
10. Klik in de werkbalk op het driehoekje onder Weergave.
11. Klik op SQL-weergave.
Je ziet de gegenereerde SQL.
12. Klik in de werkbalk op het driehoekje onder Weergave.
13. Klik op Gegevensbladweergave.
Je ziet het resultaat van de query. Maak zelf maar eens een paar query’s in het scherm
SQL en kijk dan in de schermen SQL-weergave en Gegevensbladweergave naar het
resultaat.
Hoofdstuk 3 Databases en SQL
Pagina 54
Bijlage 1: installatie IIS e.d.
Pagina 55
Download