Naar de inhoud

MS Access VBA VB.Net

Ontwerpen van Database en VB.net voor Dummies
akke.beakke.be

Berichten van 8 april 2013 tot 14 april 2013

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

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

Vb.net en Tekstbestanden

Creëren, Inlezen en schrijven naar tekstbestanden.

Public Sub LezenTekstBestand_1() 
'Er bestaat een tekstbestand tweede.txt in de map van de toepassing
Dim mijnLezer As New IO.StreamReader("tweede.txt")
Dim mijnLijn As String = ""
While Not IsNothing(mijnLijn)
mijnLijn = mijnLezer.ReadLine
If Not IsNothing(mijnLijn) Then
Debug.Print("Ingelezen tekstbestand:" & mijnLijn)
End If
End While
End Sub

 Public Sub CreerTekstBestand_1()
Dim mijnPad = IO.Directory.GetCurrentDirectory & "TekstmijnTekst.txt"
If IO.File.Exists(mijnPad) = False Then
' Indien het tekstbestand niet bestaat creër het
Dim sw As IO.StreamWriter = IO.File.CreateText(mijnPad)
sw.WriteLine("Dit is de eerste lijn")
sw.WriteLine("Dit is de tweede lijn")
sw.WriteLine("Dit is de derde lijn")
sw.Flush() 'Alles die in de buffer geschreven wordt opgeslagen in het bestand terwijl de buffer geledigd wordt.
sw.Close()
' Indien het bestaat verwijder het en creër opnieuw
Else
IO.File.Delete(mijnPad)
Dim sw As IO.StreamWriter = IO.File.CreateText(mijnPad)
sw.WriteLine("Dit is de eerste nieuwe lijn")
sw.WriteLine("Dit is de tweede nieuwe lijn")
sw.WriteLine("Dit is de derde nieuwe lijn")
sw.Flush()  'Alles die in de buffer geschreven wordt opgeslagen in het bestand terwijl de buffer geledigd wordt.
sw.Close()
End If
' Bestand openen en inlezen
Dim sr As IO.StreamReader = IO.File.OpenText(mijnPad)
Do While sr.Peek() >= 0 'Geeft een integer overeenkomstig het volgende te lezen karakter Geeft -1 indien geen karakters meer te lezen zijn.
Debug.Print(sr.ReadLine())
Loop
sr.Close()
End Sub

 Public Sub Schrijven_en_Lezen_1()
If Microsoft.VisualBasic.FileIO.FileSystem.FileExists("TekstEerste.txt") Then
FileIO.FileSystem.WriteAllText("TekstEerste.txt", "-een", vbTrue)
Dim strGelezen As String = Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText("TekstEerste.txt")
MsgBox(strGelezen)
End If
End Sub

Public Sub Schrijven_1()
If Microsoft.VisualBasic.FileIO.FileSystem.FileExists("TekstDerde.txt") Then
Dim schrijver As New IO.StreamWriter("TekstDerde.txt")
Dim sb As New System.Text.StringBuilder()
Dim i As Short = 0
For i = 1 To 5
sb.AppendLine("xxxxxxxxxxxxxxx")
sb.AppendLine(i.ToString)
Next
schrijver.Write(sb.ToString)
schrijver.Close()
End If
End Sub

 Public Sub schrijven_2()
'met system.IO kan men een tekstbestand maken
Dim strStartUp As String = Application.StartupPath
MsgBox("Startop pad : " & strStartUp)
MsgBox(My.Resources.Pad)
If Not IO.File.Exists(My.Resources.Pad & "Vierde.txt") Then
Using schrijver As IO.StreamWriter = IO.File.CreateText(My.Resources.Pad & "Vierde.txt") ' retourneert een streamWriter
schrijver.WriteLine("Mijn eerste lijn")
schrijver.Close()
End Using
Else
'Mijn eerste lijn wordt overschreven
Dim schrijver As New IO.StreamWriter(My.Resources.Pad & "Vierde.txt")
Using schrijver
schrijver.WriteLine("Mijn nieuwe eerste lijn")
schrijver.WriteLine("Mijn tweede lijn")
schrijver.Close()
End Using
Using schrijver2 As IO.StreamWriter = IO.File.AppendText(My.Resources.Pad & "Vierde.txt")
schrijver2.WriteLine("Mijn derde lijn")
schrijver2.Close()
End Using
End If
End Sub

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

XML en LINQ

Wat is XML

XML staat voor Extensible Markup Language en is een standaard taal van het World Wide Web Consortium. Met XML kan men gestructureerde gegevens weergeven in de vorm van platte tekst die zowel door een computer als door een mens leesbaar zijn. Het XML-formaat wordt gebruikt om gegevens op te slaan en/of om gegevens over het internet te versturen. XML gebruikt elementen en attributen om gegevens te structureren. Men is echter vrij om de namen voor de elementen en attributen zelf te kiezen gezien de keuze afhangt van wat men met het XML bestand van plan is. De XML-specificatie definieert enkel de syntaxis van elementen, attributen en de andere structuren die in XML-bestanden kunnen voorkomen.

Wat is LINQ

LINQ staat voor Language Integrated Query. Het is een taal die door Microsoft ontworpen is en deel uit maakt van het .Net framework en derhalve beschikbaar is in de Express uitgaven van Visual Studio. LINQ doet denken aan SQL. SQL staat voor Structured Query Language en is een krachtige taal om relationele databases zoals MS Access, SQL-server... aan te sturen en te bevragen. De taal is in de jaren ’70 door IBM ontwikkeld. De Syntaxis van LINQ wijkt echter af van deze van SQL. Met LINQ kan men ook gegevens uit XML en Arrays bestanden benaderen. Vanzelfsprekend ondersteund Visual Basic .NET LINQ.
Met LINQ kan men in VB.net ook XML-bestanden aanmaken.

Bespreking van mijn class clsLinqNaarXml

Door gebruik te maken van deze Class kan men met LINQ XML- bestanden creëren, er data aan toevoegen en data opvragen

Public Class clsLinqNaarXml
    Private Shared strmijnData As String = "c:\av_VBNET\Data\wa_Testen_av_2\mijnData.xml"


    Public Shared Function Geef_mijnData() As XDocument
        Try
            Dim mijnDoc As XDocument = XDocument.Load(strmijnData)

            Return mijnDoc
        Catch ex As System.IO.FileNotFoundException
            MessageBox.Show(ex.Message)
            Return Nothing
        End Try
    End Function


    Public Shared Sub Toev_mijnData(ByVal strNaam As String, ByVal strVNaam As String, ByVal strGesl As String, _
     ByVal shtGebJaar As Short)
        'Het document inladen
        'Dim mijnDoc As XDocument = XDocument.Load("mijnData.xml")
        Dim mijnDoc As XDocument = XDocument.Load(strmijnData)
        'Nieuw XElement op basis van de parameters
        Dim NieuwXElement As New XElement("Persoon", New XElement("Naam", strNaam),
                                          New XElement("VNaam", strVNaam),
                                          New XElement("Gesl", strGesl),
                                          New XElement("GebJaar", shtGebJaar))
        'toeveogen aan het in memory element
        ' mijnDoc.Descendants("Persoon").First.Add(NieuwXElement) toevoegen na eerste element
        mijnDoc.Descendants("Datalijst").Last.Add(NieuwXElement)
        'naar schijf bewaren
        mijnDoc.Save(strmijnData)
    End Sub


    Public Shared Sub Zoek_OpGels(ByVal strGesl As String)
        'Het document inladen
        Dim mijnDoc As XDocument = XDocument.Load(strmijnData)
        'LINQ expressie opstellen
        Dim zoekOpGesl = From Persoon In mijnDoc.Descendants("Persoon")
        Where CStr(Persoon.Element("Gesl")) = strGesl
        Select Persoon.Element("VNaam").Value
        Dim data As String = String.Empty
        For Each item In zoekOpGesl.Distinct()
            data &= String.Format("- {0}" & vbLf, item)
        Next
        MessageBox.Show(data, String.Format("{0} Voornaam is:", strGesl))

    End Sub


    Public Shared Sub Toev_Lijst(ByVal intIDData As Integer, ByVal strTypeData As String, ByVal strNaamData As String _
                                , ByVal strOmschrData As String, ByVal strPadBest As String)
        Dim mijnDocX As XDocument = XDocument.Load(strPadBest)
        Dim NieuwXElement As New XElement("Data",
                                          New XElement("IDData", intIDData), _
                                          New XElement("TypeData", strTypeData), _
                                          New XElement("NaamData", strNaamData), _
                                          New XElement("OmschrData", strOmschrData))
        mijnDocX.Descendants("Lijst").Last.Add(NieuwXElement)
        mijnDocX.Save(strPadBest)

    End Sub
    


    Public Shared Sub MaakNieuwe_Lijst(ByVal strPadBest As String, ByVal intIDData As Integer, ByVal strTypeData As String,
                                       ByVal strNaamData As String, ByVal strOmschrData As String)
        Dim lijstXDoc As New XElement("Lijst",
                                               New XDeclaration("1.0", "utf-8", "yes"),
                                               New XComment("Een lijst met data!"),
                                                    New XElement("Data",
                                                    New XElement("IDData", intIDData),
                                                    New XElement("TypeData", strTypeData),
                                                    New XElement("NaamData", strNaamData),
                                                    New XElement("OmschrData", strOmschrData)))
        lijstXDoc.Save(strPadBest)

    End Sub
End Class

Toepassen van bovenstaande klas op het formulier frmHoofd

Imports System.Xml.Linq


Public Class frmHoofd

    Private Sub frmHoofd_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.cbgGeslZ.SelectedText = "Man"
        Me.cboGesl.SelectedText = "Man"
        Me.txtmijnData.Text = clsLinqNaarXml.Geef_mijnData.ToString
    End Sub


    Private Sub cmdToevoegen_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdToevoegen.Click
        clsLinqNaarXml.Toev_mijnData(Me.txtNaam.Text, Me.txtVNaam.Text, Me.cboGesl.Text, Me.txtGebJaar.Text)
        Me.txtmijnData.Text = clsLinqNaarXml.Geef_mijnData.ToString
    End Sub


    Private Sub cmdGeslZ_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdGeslZ.Click
        clsLinqNaarXml.Zoek_OpGels(Me.cbgGeslZ.Text)
    End Sub


    Private Sub cmd_frm_xml_maken_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
     Handles cmd_frm_xml_maken.Click
        frmXMLMaken.Show()
        frmXMLMaken.Visible = True

    End Su
End Class

Hier het formulier waar de class op toegepast wordt.

Formulier

Berekeningen met LINQ zoals in de class clsDataSpel

Stel een XML bestand ppSpel.xml met volgende structuur:

XML-formulier

Ten einde berekeningen te kunnen uitvoeren op dit bestand creëren wij de clsDataSpel

Public Class clsDataSpel
    Private Shared _strppData As String = My.Computer.FileSystem.CurrentDirectory & "\ppData\ppSpel.xml"
    Private _datum As String


    Public Sub New()

    End Sub


    Public Shared Function Geef_ppData() As XDocument
        Try
            Dim mijnDoc As XDocument = XDocument.Load(_strppData)

            Return mijnDoc
        Catch ex As System.IO.FileNotFoundException
            MessageBox.Show(ex.Message & vbCrLf & "Databestand niet gevonden!")
            Return Nothing
        End Try
    End Function
  

  
    Public Shared Sub Toev_ppData(ByVal strNaam As String, ByVal strDatum As String, ByVal strGewonnen As String)
        'Het document inladen

        Dim mijnDoc As XDocument = XDocument.Load(_strppData)
        'Nieuw XElement op basis van de parameters
        Dim NieuwXElement As New XElement("resultaat", New XElement("naam", strNaam),
                                          New XElement("datum", strDatum),
                                          New XElement("gewonnen", strGewonnen))

        'toevoegen aan het in memory element

        mijnDoc.Descendants("spel").Last.Add(NieuwXElement)
        'naar schijf bewaren
        mijnDoc.Save(_strppData)
    End Sub


    Public Shared Function Aant_Spel() As Integer
        Dim mijnDoc As XDocument = XDocument.Load(_strppData)
        Dim Aant As Integer = (From a In mijnDoc.Descendants("resultaat") Select a).Count
        Return Aant
    End Function


    Public Shared Function pp_Gewonnen() As Integer
        Dim mijnDoc As XDocument = XDocument.Load(_strppData)
        Dim Aant As Integer = (From a In mijnDoc.Descendants("resultaat") Where a.Element("gewonnen") = "n" Select a).Count
        Return Aant
    End Function


    Public Shared Function Naam_Aant_Spel(ByVal strNaam As String) As Integer
        Dim mijnDoc As XDocument = XDocument.Load(_strppData)
        Dim Aant As Integer = (From a In mijnDoc.Descendants("resultaat")  _
        Where CStr(a.Element("naam").Value) = strNaam Select a.Element("naam")).Count
        Return Aant
    End Function


    Public Shared Function Naam_Gewonnen(ByVal strNaam As String) As Integer
        Dim mijnDoc As XDocument = XDocument.Load(_strppData)

        Dim Aant As Integer = (From a In mijnDoc.Descendants("resultaat") Where a.Element("gewonnen") = "j"  _
        AndAlso a.Element("naam") = strNaam Select a).Count
        
        Return Aant
    End Function
 

   
    Public Shared Function Namen() As List(Of String)
        Dim mijnDoc As XDocument = XDocument.Load(_strppData)
        
        Dim Allenamen = From a In mijnDoc.Descendants("resultaat") Order By a.Element("naam").Value _
         Select a.Element("naam").Value Distinct

        Dim _Namen As New List(Of String)

        For Each strNaam In Allenamen
            _Namen.Add(strNaam)
            
        Next strNaam
        Return _Namen
        Return Nothing
    End Function


    ReadOnly Property Datum
        Get
            Datum = _datum
        End Get
    End Property


    Public Shared Function GeefDatum() As String
        Return Date.Now.Day.ToString & "/" & Date.Now.Month.ToString & "/" & Date.Now.Year.ToString
    End Function

End Class

Bij het opstarten van formulier hieronder wordt gebruik gemaakt van de class clsDataSpel.

XML-formulier
Public Class frmStart

    Private Sub frmStart_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'lijst vullen van spelers
        
        Dim strNamen As New List(Of String)
        strNamen = clsDataSpel.Namen
        For intTelNamen = 0 To strNamen.Count - 1
            Me.lstSpelers.Items.Add(strNamen(intTelNamen))
        Next
        Me.lstSpelers.SelectedIndex = 0
        'resultaten van pietje pek weergeven
        Dim strResulPP As String = "PIETJE PEK speelde " & clsDataSpel.Aant_Spel.ToString & " maal" _
                                   & vbCrLf & " en won " & clsDataSpel.pp_Gewonnen.ToString & " maal !"
        Me.lblResul_PP.Text = strResulPP

       'resultaten speler blanken
        Me.lblResul_Sp.Text = ""
    End Sub


    Private Sub lstSpelers_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lstSpelers.Click
        Dim strNaamSpeler As String = Me.lstSpelers.SelectedItem.ToString
        Dim strResulSp As String = strNaamSpeler.ToUpper & " speelde " & clsDataSpel.Naam_Aant_Spel(strNaamSpeler).ToString & " maal" _
                                   & vbCrLf & " en won " & clsDataSpel.Naam_Gewonnen(strNaamSpeler).ToString & " maal !"
        Me.lblResul_Sp.Text = strResulSp
    End Sub


    Private Sub lstSpelers_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lstSpelers.DoubleClick
        Me.txtNaam.Text = Me.lstSpelers.SelectedItem.ToString
    End Sub

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

Het belang van Mappen en bestanden

Over Mappen en Bestanden

In ieder programma wordt er gebruik gemaakt van Mappen en bestanden, soms bestaan Mappen of moeten deze via het programma aangemaakt worden. Het komt ook veelvuldig voor dat men moet controleren indien een bepaald bestand bestaat.
Hier enkele mogelijkheden.

Bemerk dat in de class of module de namespace System.IO moet geïmporteerd worden.
Imports System.IO
Public Class clsMapBest

Public Shared Sub sMapContr(ByVal strPad As String)
 'controleer indien een Map of Mappen-structuur bestaat zoniet creeër
Try
If Directory.Exists(strPad) Then
MessageBox.Show(strPad & " bestaat reeds !", "Info Map", MessageBoxButtons.OK)
Else
Dim map As DirectoryInfo = Directory.CreateDirectory(strPad)
MessageBox.Show("Map " & strPad & " aangemaakt!", "Info Map", MessageBoxButtons.OK)
End If
Catch ex As Exception
Dim strInfo As String = "Operatie map aanmaken mislukt : " & ex.Message
End Try
End Sub

Public Shared Function fBestaatBest(ByVal strPadBest As String) As Boolean
If File.Exists(strPadBest) Then
Return True
Else
Return False
End If
End Function
Hoe vind je dit bericht?
Geschreven door Toon om 00:00 Reageer op dit bericht

Vier op een rij

Het bekende spelletje 'Vier op een rij'
Kan zowel op PC's met Windows 7 als 8 geïnstalleerd worden.
Werk wijze :
  1. download van hier het zip bestand vieroprij.zipx.
  2. Maak een map aan en Unzip vieroprij.zipx naar de Map.
  3. Ga naar de Map en dubbelklik op setup bestand.
  4. Volg de instructies.
  5. Eens geïnstalleerd start het programma van zelf op
  6. Er wordt een link-icoon op het bureaublad geplaatst.
Formulier
Bijlagen
Hoe vind je dit bericht? 1 stem
Geschreven door Toon om 12:57 Reageer op dit bericht

Meer van MS Access VBA VB.Net

↑ Terug naar de berichten