Inleiding Is dit boek het juiste boek voor jou?



Dovnload 281.91 Kb.
Pagina5/8
Datum20.08.2016
Grootte281.91 Kb.
1   2   3   4   5   6   7   8

Gegevens wijzigen


Je kunt nu gegevens in een dataset laden en door de records bladeren. Maar je wilt ook de gegevens kunnen veranderen.


  1. Ga naar een willekeurig record.

  2. Verander het telefoonnummer.

  3. Blader naar een ander record.

  4. 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.
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.

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.
End Try sluit het Try - Catch - End Try gedeelte af.



1   2   3   4   5   6   7   8


De database wordt beschermd door het auteursrecht ©opleid.info 2017
stuur bericht

    Hoofdpagina