Hoofdstuk 8: Visual Basic
8.9. Databases
8.9.1. Het aanmaken van een nieuwe database
Met Visual Basic kun je databases beheren, die met bekende database-programma's leesbaar zijn.
Visual Basic kan o.a. overweg met databases van Access en Excel.
We beperken ons hier tot een Access database.
We maken als voorbeeld een database aan met de gegevens van de leerlingen van je klas.
De naam van de database is School.mdb, de naam van de tabel die we aanmaken in de
database is Klas.
Als je een nieuwe database wilt aanmaken met Visual Basic dan heb je de Visual Data Manager nodig.
Die kan je oproepen door in de menubalk te klikken op Add-Ins en dan op Visual Data Manager
Dan verschijnt het venster van de Visual Data Manager, klik daarin op File → New → Microsoft Access → Version 7.0 mdb
Je kunt dan de naam en de map voor de nieuwe database invoeren. Geef de database de naam School,
kies een map uit voor de database, en klik op Opslaan
In het datamanagerscherm verschijnen twee vensters : het Database Window en het SQL window.
Klik met de rechtermuisknop in een leeg gedeelte van het Database Window en klik in het snelmenu op
New Table.
Dan verschijnt een venster, waarin je de naam van de tabel kunt invoeren achter Table Name
Geef de nieuwe tabel de naam Klas en klik op de knop Add Field
Dan verschijnt er een venster waarin je de velden van de tabel kunt invoeren.
Maak de volgende velden aan, klik telkens op OK als je klaar bent met een veld, en voer dan het volgende in:
veldnaam | type | lengte (size) | AllowZeroLength | Required |
achternaam | tekst | 20 | nee | ja |
voornaam | tekst | 10 | nee | ja |
llnr | integer | | nee | ja |
straat | tekst | 20 | ja | nee |
nummer | tekst | 10 | ja | nee |
postcode | tekst | 7 | ja | nee |
woonplaats | tekst | 20 | ja | nee |
telefoon | tekst | 10 | ja | nee |
Klik op Close als je klaar bent met deze velden.
Klik dan op Add Index
Klik onder Available Fields op llnr, geef de index de naam llnr_index, en klik op OK en dan op Close
Klik dan op Build the Table
8.9.2. Een bestaande Access-database gebruiken
Je kunt ook gebruik maken van een al bestaande database in Access. Daarvoor klik je in het Data Manager venster op File →
Open Database → Microsoft Access
Je krijgt dan een verkennervenster te zien, waarin je de database waarmee je wilt werken kunt selecteren en
openen.
Maar je zult merken dat, als je probeert een database die gemaakt is met Access 2003 (of later), je een foutmelding krijgt omdat
Visual Basic al een vrij oud programma is dat alleen kan omgaan met Access 97 en ouder.
Je kunt de database school, die we net gemaakt hebben, nu ook openen.
Je kunt de structuur van een bestaande tabel bekijken door in het Data Manager Window met de rechtermuisknop
te klikken op de tabel, en dan de optie Design te kiezen.
Je kunt ook gegevens invoeren m.b.v. de datamanager.
Klik in het Visual Data Manager venster met de rechter-muisknop op de tabel, en kies Open
, dan verschijnt onderstaand venster.
Als je gegevens in wilt vullen klik je eerst op Add.
Telkens als je een record hebt ingevuld, klik je op Update.
Voer op deze manier de gegevens van een aantal leerlingen van je klas in.
8.9.3. Een formulier voor het bewerken van gegevens
Het is de bedoeling om een formulier te ontwerpen, waarmee je de gegevens uit de database school.mdb kunt bewerken.
In de toolbox vind je het besturingselement Datacontrol: .
Klik hier op, en plaats dat besturingselement op het formulier.
Op het formulier verschijnt een datacontrol-balk.
-
Kies nu in het properties-venster van de datacontrol bij DatabaseName de database school.mdb uit.
Dit doe je door op de drie puntjes te klikken, die achter DatabaseName verschijnen als je er op klikt.
Dan verschijnt een verkennervenster waarin je de database kunt opzoeken.
- Klik in hetzelfde properties-venster op RecordsetType.
Je kunt dan kiezen uit drie recordset-types : 0 - Table, 1 - Dynaset en 2 - Snapshot
Kies voor Table, want we willen de gegevens van de tabel klas bewerken.
-
Verder moet je in het properties-venster van de datacontrol bij RecordSource opgeven
met welke tabel je wilt werken.
Als je op RecordSource klikt verschijnt er een pijltje, en als je daar op klikt verschijnen de namen van alle tabellen (in ons
geval is dat er maar één). Klik op de tabel klas
- Klik in hetzelfde properties-venster nog op Caption, en geef de datacontrol als
opschrift Klas
- Klik tenslotte nog op Name, en geef de datacontrol de naam datKlas
Ontwerp nu het formulier zoals je hier linksonder ziet.
Voor elk veld van de tabel zit er een tekstvester op het formulier.
- In het properties-venster van die tekstvelden moet je nog iets bijzonders doen:
je moet bij elk tekstveld aangeven welk
gegevensbestand er bij hoort, en welk veld van de tabel.
- Klik daarvoor op DataSource, en kies voor datKlas (want zo hebben we de datacontrol genoemd).
- Klik verder op DataField, en klik op het pijltje dat verschijnt. Dan verschijnen de
namen van alle velden van de tabel. Kies dan het
veld uit dat in het betreffende tekstvenster moet komen.
Geef de tekstvelden de namen van de velden, die erbij horen, met als prefix txt (dat zet je er dus voor).
Dus het tekstvenster voor de achternaam noem je txtAchternaam, het tekstvenster voor de voornaam txtVoornaam, enz.
Zet bij het properties-venster van het tekstveld llnr Enabled op false, want het
is de bedoeling dat dat leerlingennummer niet gewijzigd wordt, en bij een nieuwe leerling
wordt het eerstvolgende nummer automatisch ingevoerd.
Plaats verder nog drie buttons op het formulier (zie de figuur hierboven), noem die
cmdNieuw, cmdVerwijder, en cmdSave.
8.9.4. Het programma voor het bewerken van de gegevens
Als je het programma laat lopen zie je direkt al de gegevens van de eerste leerling in beeld.
Je moet wel beslist de gegevens van één leerling hebben ingevoerd
m.b.v. de Visual Data Manager (zie paragraaf 1), anders krijg je een foutmelding.
Verder kun je al door de ingevoerde leerlingen bladeren m.b.v. de pijltoetsen op de datacontrol-balk
Maar als je de gegevens wijzigt en op Save klikt worden de gewijzigde gegevens niet opgeslagen, dat moet je nog programmeren.
Dat doe je als volgt:
Private Sub cmdSave_Click()
datKlas.Recordset.Edit
datKlas.Recordset.Update
End Sub
De opdracht datKlas.Recordset.Update zorgt er voor dat het record wordt opgeslagen.
Maar als je alleen die opdracht geeft krijg je een foutmelding, want het programma moet weten op welke plaats in de tabel het record
moet worden opgeslagen.
Daar dient de opdracht datKlas.Recordset.Edit voor. Die opdracht heeft tot gevolg dat het
programma weet dat het nummer van het record, dat in beeld is, gewijzigd wordt. En als het record wordt opgeslagen, het in de plaats
komt van het aktieve record.
Als je door de records bladert m.b.v. de pijltoetsen dan krijg je alleen de bestaande records in beeld, en dan kun je die
wijzigen. Je kunt nog geen nieuw record toevoegen.
Daarvoor dient de button Nieuw, het is de bedoeling dat als je daarop klikt er een leeg record verschijnt waarin je de
gegevens van een nieuwe leerling in kunt voeren.
Dat moeten we ook nog programmeren, dat gaat als volgt:
Private Sub cmdNieuw_Click()
Dim nummer As Integer
nummer = datKlas.Recordset.RecordCount + 1
datKlas.Recordset.AddNew
txtLlnr = Str(nummer)
datKlas.Recordset.Update
txtAchternaam.SetFocus
End Sub
De opdracht nummer = datKlas.Recordset.RecordCount + 1 zorgt er voor het aantal records geteld wordt,
daar wordt één bij opgeteld, en die waarde wordt toegekend aan de variabele nummer
De opdracht datKlas.Recordset.AddNew heeft tot gevolg dat alle tekstvensters geleegd worden, zodat
de gegevens van een nieuw record ingevoerd kan worden.
De opdracht txtLlnr = Str(nummer) heeft tot gevolg dat de waarde van het nieuwe nummer
in het tekstvenster voor het leerlingennummer verschijnt.
Door de opdracht datKlas.Recordset.Update wordt dit lege record, met alleen nog maar het nieuwe
leerlingennummer, alvast wordt opgeslagen.
Dat is nodig als we dezelfde code voor het opslaan, die hierboven staat, willen gebruiken.
Die code begint met datKlas.Recordset.Edit, en die opdracht heeft tot gevolg dat het huidige record het aktieve record wordt, maar
dat kan alleen met een al bestaand record.
Dit zou ook wel anders opgelost kunnen worden, maar dat kun je misschien zelf wel uitvinden.
De laatste opdracht zorgt er voor dat de cursor in het tekstvenster van de achternaam wordt geplaatst.
Tenslotte moeten we er nog voor zorgen dat als je op de knop met Verwijder klikt het record, dat in beeld is,
verwijderd wordt.
De code daarvoor is:
Private Sub cmdVerwijder_Click()
datKlas.Recordset.Delete
datKlas.Recordset.MoveNext
End Sub
De opdracht datKlas.Recordset.Delete heeft tot gevolg dat het aktieve record wordt
verwijderd.
En de volgende opdracht zorgt er voor dat het volgende record getoond wordt.
|