Naar de inhoud

MS Access VBA VB.Net

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

Categorie: XML LINQ

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

Meer van MS Access VBA VB.Net

↑ Terug naar de berichten