Naar de inhoud

MS Access VBA VB.Net

Ontwerpen van Database en VB.net voor Dummies
seniorennet.beseniorennet.be

String

Datatype String

Het String datatype vertegenwoordigt reeksen van letters en cijfers, waar men met cijfers in principe geen wiskundige bewerkingen beoogt.
VB.net laat diverse stringmanipulaties toe, waarvan enkele handige hieronder besproken worden.

 Public Sub StringMan()
        Dim mijnEersteString As String = ""
        Dim mijnTweedeString As String = ""
        Dim mijnDerdeString As String = ""
        Dim mijnVierdeString As String = ""
        Dim mijnVijfdeString As String = ""
        Dim mijnZesdeString As String = ""
        Dim mijnZevendeString As String = ""
        Dim mijnAchtsteString As String = ""
        Dim mijnNegendeString As String = ""
        
De Format-methode: mijnEersteString = String.Format("{0}!", "Een allebeste goede morgen") Debug.Print("Mijn eerste string:" & mijnEersteString) 'Retourneert : Mijn eerste string:Een allebeste goede morgen! 'Gebruikmakend van de Format methode en de accoladetekens kan men zogenaamde substitutie verwezenlijken 'Meedere substituties zijn mogelijk, zoals bijvoorbeeld mijnTweedeString = String.Format("Mijn TV van merk {0} Type {1} Bouwjaar {2}", "Sony", "Bravia", 2012) Debug.Print("Mijn tweede string:" & mijnTweedeString) 'Retourneert : Mijn tweede string:Mijn TV van merk Sony Type Bravia Bouwjaar 2012 'De format methode kan met C duiding ook gebruikt worden voor munt aanduiding overeenstemmend met de plaatselijke instelling in Windows mijnDerdeString = String.Format("{0:C}", 100.75) Debug.Print("Mijn derde string:" & mijnDerdeString) 'Retourneert : Mijn derde string:€ 100,75 'De format methode met N duiding geeft correcte punctuatie van een getal mijnVierdeString = String.Format("{0:N}", 1234567890) Debug.Print("Mijn vierde string:" & mijnVierdeString) 'Retourneert = Mijn vierde string:1.234.567.890,00 'De format methode met P duiding geeft een getal in procenten terug mijnVijfdeString = String.Format("{0:P}", 0.25) Debug.Print("Mijn vijfde string:" & mijnVijfdeString) 'Retourneert : Mijn vijfde string:25,00% 'Met de format methode kan men bijvoorbeeld ook een telefoon of GSM nummer in een correctie vorm weergeven 'Nemen wij bijvoorbeeld een GSM nummer door de gebruiker ingegeven als 0475 23 34 89 Dim strGSM = "0475 23 34 89 " 'Met de Trim functie verwijderen wij alle eerste en laatste spaties strGSM = Trim(strGSM) 'Vervolgens verwijderen spaties binnen het nummer strGSM = strGSM.Replace(" ", "") 'controleren indien 10 cijfers opgegeven werden, dan de eerste nul verwijderen en dan getal laten vooraf gaan door 32 If strGSM.Length = 10 AndAlso Left(strGSM, 1) = "0" Then strGSM = "32" & Right(strGSM, 9) Dim lng As Long = CLng(strGSM) mijnZesdeString = String.Format("GSM-nr = +{0: ##### ## ## ##}", lng) Debug.Print("Mijn zesde string:" & mijnZesdeString) 'Retourneert : Mijn zesde string:GSM-nr = + 32475 23 34 89 End If 'Het gebeurt dat men een string wijzigt in een lus For intTel As Integer = 0 To 100 mijnZevendeString += "--" & intTel.ToString Next Debug.Print("Mijn zevende string:" & mijnZevendeString) 'Retourneert : Mijn zevende string:--0--1--2--3--4--5--6--7--8--9--10--11 enz 'Bovenstaande werkt maar is onefficient iedere lus moet de variabele in het geheugen opgehaald en vervangen worden 'Beter is om in dergelijke gevallen gebruik te maken van het StringBuilder-object Dim mijnBuilder As New System.Text.StringBuilder For intTel As Integer = 0 To 100 mijnBuilder.Append("--") mijnBuilder.Append(intTel) Next mijnAchtsteString = mijnBuilder.ToString Debug.Print("Mijn achtste string:" & mijnAchtsteString) 'Retourneert : Mijn achtste string:--0--1--2--3--4--5--6--7--8--9--10--11 enz 'Met de Substring-methode kan mijn een vooraf bepaald gedeelte van een string afzonderen mijnNegendeString = "Uit deze string wordt een bepaald gedeelte afgezonderd" mijnNegendeString = mijnNegendeString.Substring(9, 6) Debug.Print("Mijn negende string:" & mijnNegendeString) 'Retourneert : Mijn negende string:string End Sub
Hoe vind je dit bericht? 1 stem
Geschreven door Toon om 11:44 Reageer op dit bericht
Reageer op dit bericht

Reageer op dit bericht

Een titel of je eigen website toevoegen

Zeeslag

Het klassieke zeeslag spel zoals toegelicht op http://nl.wikipedia.org/wiki/Zeeslag_(spel)

Heb ik ontwikkeld in VB.net versie 2010. Kan zonder problemen geïnstalleerd worden op Window PC's met versie Windows 7 en 8.

Hoe installeren :
  1. Bewaar het zip bestand op uw PC
  2. Via WinZip het bestand unzippen naar een afzonderlijke ledige MAP
  3. Ga via Windows-verkenner naar de MAP en dubbelklik op setup.
  4. Volg de instructies

Start nieuw spel: men moet zijn schepen plaatsen in rechter vak
start nieuw spel
Hier zijn de schepen geplaatst, schepen Kapitein Baard zijn onzichtbaar
Schepen speler zijn geplaatst
Voor de spelregels, druk op vraagteken '?' rechts bovenaan
Spelregels
Speler geeft positie in en drukt op vuren -links-
na enkele seconden vuurt kapitein baard -rechts. Mis = Wit, Raak = Rood.
Vuren
Bijlagen
Hoe vind je dit bericht? 4 stemmen
Geschreven door Toon om 00:00 Reageer op dit bericht

Voorwaarden en Lussen

If Expressie die Waar of Vals is Then
	Doe iets als de expressie Waar is
End If
Const strResultaat As String = "Het resultaat is....."
Sub sAls1()
If MsgBox("Wat kies je ?", vbQuestion + vbOKOnly, "maak keuze") = vbOK Then
    MsgBox "u koos OK!", vbInformation, strResultaat
End If
End Sub
If Expressie die Waar of Vals is Then
	Doe iets als de expressie Waar is
Else
	Doe iets anders indien de Expressie niet waar is
End If
Sub sAls2()
Dim strBoodschap As String
If MsgBox("Wat kies je ?", vbQuestion + vbOKCancel, "maak keuze") = vbOK Then
    strBoodschap = "u koos OK!"
Else
    strBoodschap = "u koos Cancel"
End If
MsgBox strBoodschap, vbInformation, strResultaat
End Sub
If Eerste Expressie die Waar of Vals is Then
	Doe iets als de eerste expressie Waar is en negeer volgende ElseIf
ElseIf Tweede Expressie die Waar of Vals is Then
	Doe iets als de tweede expressie waar is en negeer volgende ElseIf
ElseIf Derde Expressie die Waar of Vals is Then
	Doe iets als de Derde expressie waar is
End If
Sub sAls3()
Dim intKeuze As Integer
Dim strBoodschap As String
intKeuze = MsgBox("Wat kies je ?", vbQuestion + vbYesNoCancel, "maak keuze")
    If intKeuze = vbYes Then
        strBoodschap = "u koos Yes!"
    ElseIf intKeuze = vbNo Then
        strBoodschap = "u koos No"
    ElseIf intKeuze = vbCancel Then
        strBoodschap = "u koos Cancel"
    End If
MsgBox strBoodschap, vbInformation, strResultaat
End Sub
vertoont veel gelijkenis met voorgaande If Then ElseIf Then End If
maar is overzichtelijk en beter als er veel condities moeten getest worden
Select case
	Case 
		voer actie uit indien waar en ga dan naar End Select
	Case 
		voer actie uit indien waar en ga dan naar End Select
	Case 
		voer actie uit indien waar en ga dan naar End Select
........enz
End Select	
Sub sSelect()
Dim strBoodschap As String
Dim varGegeven As Variant

varGegeven = InputBox("voer willekeurig getal in", "Select Case voorbeeld")
If IsNumeric(varGegeven) Then
    Select Case varGegeven
        Case Is < 0
            strBoodschap = "Het getal is kleiner dan nul"
        Case Is = 0
            strBoodschap = "Het getal is gelijk aan nul"
        Case Is < 11
            strBoodschap = "Het getal is tussen 1 en 10"
        Case Is < 101
             strBoodschap = "Het getal is tussen 11 en 100"
        Case Is < 1001
            strBoodschap = "Het getal is tussen 11 en 1000"
        Case Is > 1000
            strBoodschap = "Het getal is groter dan 1000"
    End Select
Else
    strBoodschap = "u hebt geen getal ingegeven!"
End If
 MsgBox strBoodschap, vbInformation, strResultaat
End Sub
For int = 0 To 1000 (of eender ander geheel getal)
Doe iets, hier wordt een conditie gecontroleerd en herhaal tot aan 1000 (of eender ander geheel getal)
Next int
Men kan zonodig de lus verlaten met een Exit For Statement
Sub sFor1(intTelTot As Integer, intDeelbaarDoor As Integer)
Dim intTel As Integer
Dim intDum As Integer
    For intTel = 1 To intTelTot
        If intTel Mod intDeelbaarDoor = 0 Then
            intDum = intDum + 1
        End If
    Next intTel
MsgBox " van 1 tot " & intTelTot & " zijn er " & intDum & vbCrLf & " getallen deelbaar door " & intDeelbaarDoor, vbInformation, strResultaat
End Sub
For each
	Doe iets
Next
vertoont gelijkenis met voorgaande maar is vooral handig bij objecten en er moet geen limiet getal ingegeven worden
Hier een voorbeeld met formulieren
Sub sFor2()
Dim objAccess As Access.AccessObject
Dim intTel As Integer
    For Each objAccess In CurrentProject.AllForms
        Debug.Print objAccess.Name
        intTel = intTel + 1
    Next
MsgBox intTel & " formulieren", vbInformation, strResultaat
End Sub
Do While of Until een bepaalde expressie waar is
	Doe iets
Loop
er moet geen limiet getal ingegeven worden en de lus wordt doorlopen
tot de conditie waar is
tussen in kan men bijkomende condities instellen en zonodig de lus verlaten met een Exit Do statement
Sub sDo1()
Dim intIets As Integer
Dim intStap As Integer
    intStap = 1000
    intIets = 1
        Do While intIets > 0
            intIets = intIets + 1
                If intIets > intStap Then
                    If MsgBox(" wij zijn aan " & intIets & " Stoppen ?", vbInformation + vbYesNo) = vbNo Then
                        intStap = intStap + 1000
                            If intStap > 30000 Then
                                MsgBox "nu moet je stoppen!", vbCritical + vbOKOnly, strResultaat
                                Exit Do
                            End If
                    Else
                    intIets = -1
                    End If
                End If
        Loop
End Sub

Sub sDo2()
Dim intIets As Integer
Dim intStap As Integer
    intStap = 1000
    intIets = 1
    Do Until intIets > 30000
        intIets = intIets + 1
        
                If intIets > intStap Then
                    If MsgBox(" wij zijn aan " & intIets & " Stoppen ?", vbInformation + vbYesNo) = vbNo Then
                        intStap = intStap + 1000
                            If intStap > 29000 Then
                                MsgBox "nu moet je stoppen, ik verwittig niet meer!", vbCritical + vbOKOnly, strResultaat
                                intIets = 30001
                            End If
                    Else
                    intIets = 30001
                    End If
                End If
        Loop
End Sub
Een variante op Do maar zelfde principe dus
While een voorwaarde is waar
	doe iets
Wend
Sub sWhile()
Dim intTel As Integer
    While intTel > 30001
        intTel = intTel + 1
        If intTel = 30000 Then
            MsgBox "wij zijn aan " & intTel & vbCrLf & "wij gaan stoppen!", vbCritical, strResultaat
        End If
    Wend
End Sub
Hoe vind je dit bericht? 3 stemmen
Geschreven door Toon om 16:42 Reageer op dit bericht

Over willekeurige getalen.

Willekeurige getallen genereren, is een getal even of oneven

In veel programma's moeten op een bepaald ogenblik willekeurige getallen gegeneerd worden. In VB.net brengt men de code daartoe best onder in een 'class'. Hier worden een aantal class'es besproken, waar gewoon een willekeurig getal tussen twee grenzen gegeneerd wordt, maar ook waar tussen twee grenzen één zelfde waarde slechts éénmaal mag voorkomen. Ook code waarmee men kan bepalen indien het getal even of oneven is.

clsWilGet1:Willekeurig getal van Byte-datatype (0 tot 255) tussen twee limieten mag maar éénmaal voorkomen.

'System.Security.Cryptography moet in de class geImporteerd worden.
Imports System.Security.Cryptography
Public Class clsWilGet1
    Dim _set As BitArray
    Dim _min As Byte
    Dim _max As Byte
    Dim _tel As Integer


    Public Sub New(ByVal min As Byte, ByVal max As Byte)
        _min = min
        If (min > max) Then
            _max = min
        Else
            _max = max
        End If
        _set = New BitArray(_max - _min + 1)
        _tel = max - min
    End Sub


    Public Function GeefVolgendGetal() As Integer
        Dim randomGetal(0) As Byte
        Dim testGetal As Integer
        Dim rng As New RNGCryptoServiceProvider()

        Do While _tel >= 0
            rng.GetBytes(randomGetal)
            testGetal = CInt(randomGetal(0))
            testGetal = (CInt(testGetal) Mod (_max - _min + 1)) + _min
            If Not _set.Item(testGetal - _min) Then
                _set.Set(testGetal - _min, True)
                _tel -= 1
                Return testGetal
            End If
        Loop

        Return -1
    End Function


    Public Sub Reset()
        _tel = _max - _min
        _set.SetAll(False)
    End Sub
End Class

clsWilGet2:Willekeurig getal van Integer-datatype tussen twee limieten mag maar éénmaal voorkomen.

Public Class clsWilGet2
    Private _min, _max As Integer
    Private _set() As Integer 'Array of integers
    Private _index As Integer
    


    Public Sub New(ByVal min As Integer, ByVal max As Integer)
        _min = min
        If (min > max) Then
            _max = min
        Else
            _max = max
        End If

        'vorm de reeks
        _set = InitReeks()

    End Sub


    Private Function InitReeks() As Integer()

        Dim random As New Random()
        Dim getallen(_max - _min) As Integer
        Dim waarde As Integer = _min
        Dim tmp As Integer
        Dim index1 As Integer
        Dim index2 As Integer

        'vul de rees met de getallen

        For x As Integer = 0 To getallen.Length - 1
            getallen(x) = waarde
            waarde += 1
        Next

        'haal door elkaar 1000 iteraties moeten voldoende zijn

        For x As Integer = 0 To 1000
            'neem twee willekeurige indexen
            index1 = random.Next(0, getallen.Length)
            index2 = random.Next(0, getallen.Length)

            'haal door elkaar
            tmp = getallen(index1)
            getallen(index1) = getallen(index2)
            getallen(index2) = tmp

        Next
       

        Return getallen

    End Function


    Public Function GetNext() As Integer

        Dim result As Integer

        If (_index < _set.Length) Then
            result = _set(_index)
            _index += 1
        Else
            result = -1
        End If

        Return result

    End Function
End Class

clsWilGet3:Willekeurig getal van Integer-datatype tussen twee limieten mag maar éénmaal voorkomen.

Public Class clsWilGet3
    Private rand As Random
    Private pool As List(Of Integer)

    Sub New(ByVal min As Integer, ByVal max As Integer)
        rand = New Random
        pool = New List(Of Integer)(max - min)
        For i As Integer = min To max
            pool.Add(i)
        Next
    End Sub

    Public Function GeefItem() As Integer
        If pool.Count = 0 Then Return -1
        ' geef willekeurige index van de pool List.
        Dim index As Integer = rand.Next(0, pool.Count)
         ' geef weer.
        Dim draw As Integer = pool(index)
         ' verwijder van de pool List.
        pool.RemoveAt(index)
        Return draw
    End Function
End Class

clsWilGetal1, clsWilGetal2, clsWilGetal3 weergeven in een console-toepassing.

Sub Main()
        

        Dim raad1 As New clsWilGet1(1, 100)
        Dim raad2 As New clsWilGet2(1, 100)
        Dim raad3 As New clsWilGet3(1, 100)
        For intTel As Integer = 0 To 20
            Console.Write(raad1.GeefVolgendGetal & " - " & raad2.GetNext & " - " & raad3.GeefItem & vbCrLf)
        Next
        Console.ReadLine()
    End Sub

Willekeurig getal tussen twee limieten


''' Generen van een willekeurig getal tussen 0 en 7, men kan de limieten wijzigen


Public Class clsWilGetal
    Private Shared _intWilGetal As Integer



    Public Shared ReadOnly Property Genereer() As Integer
        Get
            Dim intBoven As Integer = 6
            Randomize()
            _intWilGetal = CInt(Int((intBoven * Rnd()) + 1))

            Return _intWilGetal
        End Get

    End Property

End Class

Is een getal Even of Oneven?

Sub OnOfEven()
        Dim intTeller As Integer = 1
        Dim strEven As String = "even"
        Dim strOneven As String = "oneven"
        Dim strResul As String = ""
        Do While intTeller < 100 'hier tot 100 maar kan meer zijn
            If intTeller Mod 2 = 0 Then 'getal is even
                strResul = strEven
            Else
                strResul = strOneven
            End If
            Console.WriteLine(intTeller & "is " & strResul)
            intTeller = intTeller + 1
        Loop
    End Sub

Priemgetallen weergeven tot opgegeven bovengrens

Public Function Priem(ByVal intMaxGrens As Integer) As String
        Dim i As Integer
        Dim j As Integer
        Dim bflag As Boolean
        Dim strResul As String = ""
        For i = 1 To intMaxGrens
            bflag = True
            For j = 2 To i / 2
                If i Mod j = 0 Then
                    bflag = False
                End If
            Next
            If bflag Then

                strResul += i.ToString & " "
            End If
        Next
        Return Trim(strResul)
    End Function
Hoe vind je dit bericht? 1 stem
Geschreven door Toon om 00:00 Reageer op dit bericht

Van VBA naar VB.net

VB.net

Waarom VB.net

Wie VBA onder de knie heeft ondervindt in eerste instantie niet te veel problemen om naar VB.net over te stappen. Na enige initiatie en gewenning stelt men echter vast dat de mogelijkheden extreem ruimer zijn.
Bovendien stelt Microsoft gratis een 'Expression' - versie van Visual studio ter beschikking.
Het betreft hier werkelijk een bijzondere krachtige ontwikkelings omgeving, in het Engels IDE of Integrated Development Environment.
Deze Blog heeft niet de pretentie om deze toepassing, ik werk met zowel de versie 2010 als 2012 , volledig uit de doeken te doen. Wel kan ik iedereen die graag programma's maakt, al zij het in de hobbysfeer zoals bij mezelf, deze ontwikkelingsomgeving warm aanbevelen.

Waar te bekomen ?

Via volgende link kan men gratis Visual Studio Express 2012 for Windows Desktop downloaden.
Volg de instructies en na het dowloaden en de installatie rest u nog enkel de applicatie gratis te registreren op de website van Microsoft.

Hoe onder de knie krijgen ?

Ik zelf heb mijn toevlucht gezocht bij enkele boeken over VB.net, aanraders zijn :

Deze Blog.

Op deze blog wil ik graag ervaringen delen. Van practische problemen waarop ik gezocht heb geef ik hier graag mijn oplossing.
De laatste tijd leg ik mij toe op het ontwikkelen van eenvoudige spelletjes zoals, 'Pietjesbak', 'Vier op een rij', 'Zeeslag'. Eens deze volledig op punt staan zal ik deze op deze blog ter beschikking stellen.

Hoe vind je dit bericht? 4 stemmen
Geschreven door Toon om 00:00 Reageer op dit bericht

VBA Procedures Sub en Function.

VBA Procedures Sub en Function.

VBA code wordt uitgevoerd in Sub of Function Procedures. Terwijl beide voorgaanden ingekapseld zitten in een Module of een Class-Module.

  • Sub : Bij een Sub wordt een actie uitgevoerd maar wordt er niets geretourneerd. Bijvoorbeeld een formulier openen, een bericht laten zien aan de gebruiker via de MsgBox funtie. Een Sub kan al dan niet argumenten nemen, en kan Public of Private zijn
  • Function : Bij een kan er ook een actie uitgevoerd worden maar er wordt een waarde (zie Datatypes) geretourneerd.
Hoe vind je dit bericht? 2 stemmen
Geschreven door Toon om 00:00 Reageer op dit bericht

VBA Data Types

VBA Datatypes wijken gedeeltelijke af van deze in VB en VB.net niettegenstaande men soms dezelfde naam gebruikt !


Datatype Omvang Info Naam conventie
Byte 1 byte 0 tot 255 Dim bytNummer as Byte
Boolean 2 bytes True of False Dim blnWaar as Boolean
Integer 2 bytes -32.768 tot 32.767 Dim intGetal as Integer
Long 4 bytes geheel getal + en - Dim lngGetal as Long
Single 4 bytes na de komma Dim sngGetal As Single
Double 8 bytes na de komma Dim dblGetal as Double
Currency 8 bytes valuta Dim curGeld As Currency
Date 8 bytes Dim datDatum as Date
Object 4 bytes Een refentie naar object Dim objNaam As Object
String 10 bytes + lengte Dim strLetters as String
String vast Lengte Tot 65.400 Dim strVastLengte As String * 10
Variant 22 bytes Dim varGelijkWat As Variant
User defined Afhankelijk van bepalingen Dim udtZelfGemaakt As ZelfGemaakt
Hoe vind je dit bericht? 3 stemmen
Geschreven door Toon om 00:00 Reageer op dit bericht

Wat is VBA

Wat is VBA

VBA is een objectgeoriënteerde  programmeer taal. Men kan een volledige datastructuur met datatypes en  bewerkingen definiëren. Men kan ook met andere objecten werken voor zover er in  VBA een referentie naar gelegd wordt. Deze worden gevisualiseerd in de object  browser.
VBA is beschikbaar in alle Microsoft Office programma's, en ieder programma  beschikt over een code Editor die kan geopend worden door Alt+F11 te drukken.

Ieder object kan beschikken over meerdere  eigenschappen (properties), bepaalde kunnen gewijzigd worden, andere  kunnen enkel gelezen worden. Evenzo beschikt ieder object in Access over  eigenschappen, voorbeeld het formulier-object heeft een caption (opschrift),  breedte, hoogte, achtergrondkleur enz , eigenschap.

Op objecten kunnen ook methodes  (methods) toegepast worden, welke een actie met het object tot stand  brengen. Zo heeft het DoCmd-object van Access de Beep, OpenForm...enz methode.

Een Event of gebeurtenis doet  zich voor wanneer een actie met het object plaatsgrijpt,bijvoorbeeld een  formulier die opent.

Een programma maakt ook gebruik van  variabelen. Voor een variabele wordt in het geheugen een plaats  gereserveerd waar een waarde kan gestockeerd worden. Dit doet men aan de hand  van het de Dim verklaring. Door een geschikte naam  te geven wordt de code leesbaarder. Aan variabelen kunnen verschillende datatypes toegekend worden. Men kan de efficiënte  van de code in de handwerken door de juiste datatypes te hanteren. Het is ten  zeerste aangeraden variabelen te declaren en de het juiste datatype toe te  wijzen, wijst men geen dattype toe dan kent VBA automatisch het datatype variant  toe. Het variant datatype reserveert van alle andere datatype het meeste  geheugen, en laat de code daardoor minder performant werken.
Door bovenaan een module 'Option Explicit' te vermelden legt men zichzelf de  discipline de variabelen uitdrukkelijk te declaren

Hoe vind je dit bericht? 1 stem
Geschreven door Toon om 00:00 Reageer op dit bericht

Meer van MS Access VBA VB.Net

↑ Terug naar de berichten