VBA verwijzingen

Access

Om verbinding te kunnen maken met een Access database wordt er gebruik gemaakt van de ADO bibliotheek. Vervolgens wordt via een connectiestring en een recordset de database bewerkt met SQL.

De verwijzing die tot stand moet worden gebracht is naar de ActiveX DataObjects 2.8. Deze naam verklapt tegelijkertijd de afkorting van ADO.

De onderstaande klassenmodule clsADO handelt het bewerken van een Access- of een MariaDB database af. Desgewenst kan deze klassenmodule ook worden uitgebreid met de onderstaande connectiestring om een Excel-werkblad te bewerken.

Case Is = "Excel"
        cn.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " & ExcelBestand & "; Extended Properties=Excel 8.0;"

Indien ADO wordt gebruik i.c.m. met een Excel-werkblad zal de tabelnaam (= werkbladnaam) in de SQL er als volgt moeten uitzien: [Contactpersonen$].

'-----------------------------------------------------------------------------------------------------------------------
' Auteur        : pascalterheege.nl
' Datum         : 31-3-2017
' Object        : clsADO
' Doel          : waarden laden, wijzigen en verwijderen uit database (Access of MariaDB)
' Verwijzing    : ActiveX Data Objects 2.8
' Objecten      : 1. Database verbinding
'                 2. Database recordset
' Bronnen       : https://mariadb.com/kb/en/mariadb/about-mariadb-connector-odbc/
' Opmerking     : voor het gebruik van MariaDB is gebruik gemaakt van XAMPP, een MariaDB-connector en een ODBC koppeling
'-----------------------------------------------------------------------------------------------------------------------
Option Explicit

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

Dim strSQL As String

Public Sub Openen(strDatabank As String)

'   Openen databank. Initialize kan niet omgaan met parameters, vandaar een aparte procedure

    On Error GoTo ErrorHandler

    Set cn = New ADODB.Connection

    Select Case strDatabank
        Case Is = "Access"
            cn.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " & AccessBestand
        Case Is = "MariaDB"
            cn.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=MariaDB"
    End Select

    cn.Open
    
    Exit Sub
    
ErrorHandler:
    
    MsgBox "Kon geen verbinding maken met de database!", vbCritical
    End

End Sub

Public Sub Laden(lsb As ListBox)

'   Waarden uitlezen

    Dim i As Integer
    
    Set rs = New ADODB.Recordset
    
    With rs

        .Open "SELECT * FROM Contactpersonen", cn

        .MoveFirst

        Do While Not rs.EOF
            
            With lsb
                .AddItem
                .List(i, 0) = rs.Fields("Nummer").Value
                .List(i, 1) = rs.Fields("Voornaam").Value
                .List(i, 2) = rs.Fields("Achternaam").Value
            End With
            
            i = i + 1
            
            .MoveNext
        
        Loop

    End With
    
    Set rs = Nothing
    
End Sub

Public Sub Toevoegen(intNummer As Integer, strVoornaam As String, strAchternaam As String)

'   Nieuwe record toevoegen

    strSQL = "INSERT INTO Contactpersonen " & _
                "(Nummer, Voornaam, Achternaam) " & _
                "VALUES (" & _
                intNummer & ", " & _
                "'" & strVoornaam & "', " & _
                "'" & strAchternaam & "')"
    
    cn.Execute strSQL

End Sub

Public Sub Wijzig(intNummer As Integer, strVoornaam As String, strAchternaam As String)

'   Aan de hand van nummer record wijzigen

    strSQL = "UPDATE Contactpersonen " & _
                "SET Voornaam = '" & strVoornaam & "', " & _
                "Achternaam = '" & strAchternaam & "' " & _
                "WHERE Nummer = " & intNummer
    
    cn.Execute strSQL

End Sub

Public Sub Verwijder(intNummer As Integer, blnAlles As Boolean)

'   Aan de hand van nummer rij verwijderen
    
    If blnAlles = True Then
        strSQL = "DELETE FROM Contactpersonen"
    Else
        strSQL = "DELETE FROM Contactpersonen WHERE Nummer = " & intNummer
    End If
    
    cn.Execute strSQL
    
End Sub

Private Sub Class_Terminate()

'   Deinitialisatie ADO-objecten

    cn.Close
    
    Set rs = Nothing
    Set cn = Nothing

End Sub