Informaticasite van het Sondervick College te Veldhoven                 © L.J.M van Haperen (bron : R.J. van der Beek)
 

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:

veldnaamtypelengte (size)AllowZeroLengthRequired
achternaamtekst20neeja
voornaamtekst10neeja
llnrinteger  neeja
straattekst20janee
nummertekst10janee
postcodetekst7janee
woonplaatstekst20janee
telefoontekst10janee

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.