NogGeenGuru
Gebruiker
- Lid geworden
- 5 aug 2015
- Berichten
- 130
Beste Helpers,
In een poging mijn VBA wat op te schonen ben ik gebruik gaan maken van klassenmodules.
Nu is dit compleet nieuw voor mij maar met wat hulp van professor google ben ik al een heel eind gekomen
Het lezen vanuit mijn database gaat goed maar het schrijven naar de database wil niet zo lukken
Ik heb onderstaande klassenmodule aangemaakt:
Hieraan zou ik graag nog een mogelijkheid toevoegen om nieuwe records aan te maken (en één om record(s) te verwijderen)
De primary key OpdrachtgeverNR zal ik voor het toevoegen niet nodig hebben omdat dit een autoincrement veld is.
dus ik ga er van uit dat ik een sub/functie/property nodig heb die als arugment een string OpdrachtgeverNaam aan neemt...
volgende code heb ik daarvoor geprobeerd:
Deze werkt tot op zeker hoogte...
De query wordt uitgevoerd en het record wordt ook idd aangemaakt.
maar mijn Class_Terminate() is het hier niet zo mee eens... hij loopt vast bij rs.close en geeft de melding:
Fout: 3704 De bewerking is niet toegestaan als het object gesloten is.
naar mijn mening heb ik rs geopend in rs.Open (rs = recordset)
Ik doe dus duidelijk iets verkeerd. maar ik kom er niet achter wat ik precies verkeerd doe...
kan iemand mij daar mee helpen?
In een poging mijn VBA wat op te schonen ben ik gebruik gaan maken van klassenmodules.
Nu is dit compleet nieuw voor mij maar met wat hulp van professor google ben ik al een heel eind gekomen

Het lezen vanuit mijn database gaat goed maar het schrijven naar de database wil niet zo lukken

Ik heb onderstaande klassenmodule aangemaakt:
Code:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Private pOpdrachtgeverNR As Integer
Private pOpdrachtgeverNaam As String
'Constructor
'database en recordset initialiseren
Private Sub Class_Initialize()
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
With cn
.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " & ActiveWorkbook.Path & "\DB.accdb"
.Open
End With
End Sub
'Gegevens ophalen gebruik makend van OpdrachtgeverNR (primary key)
Public Property Let OpdrachtgeverNR(intOpdrachtgeverNR)
pOpdrachtgeverNR = intOpdrachtgeverNR
With rs
.Open "Select * from Opdrachtgever where OpdrachtgeverNR = " & OpdrachtgeverNR, cn
If rs.EOF = False Then
pOpdrachtgeverNaam = .Fields("OpdrachtgeverNaam").Value
Else
MsgBox "Opdrachtgever met OpdrachtgeverNR " & OpdrachtgeverNR & " is niet gevonden!", vbCritical
End
End If
End With
End Property
'Gegevens ophalen gebruik makend van OpdrachtgeverNaam
Public Property Let OpdrachtgeverNaam(strOpdrachtgeverNaam)
pOpdrachtgeverNaam = strOpdrachtgeverNaam
With rs
.Open "Select * from Opdrachtgever where OpdrachtgeverNaam = " & OpdrachtgeverNaam, cn
If rs.EOF = False Then
pOpdrachtgeverNR = .Fields("OpdrachtgeverNR").Value
Else
MsgBox "Opdrachtgever met OpdrachtgeverNaam " & OpdrachtgeverNaam & " is niet gevonden!", vbCritical
End
End If
End With
End Property
'waarden teruggeven
Public Property Get OpdrachtgeverNR()
OpdrachtgeverNR = pOpdrachtgeverNR
End Property
Public Property Get OpdrachtgeverNaam()
OpdrachtgeverNaam = pOpdrachtgeverNaam
End Property
'Destructor
'recordset en database sluiten
Private Sub Class_Terminate()
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub
Hieraan zou ik graag nog een mogelijkheid toevoegen om nieuwe records aan te maken (en één om record(s) te verwijderen)
De primary key OpdrachtgeverNR zal ik voor het toevoegen niet nodig hebben omdat dit een autoincrement veld is.
dus ik ga er van uit dat ik een sub/functie/property nodig heb die als arugment een string OpdrachtgeverNaam aan neemt...
volgende code heb ik daarvoor geprobeerd:
Code:
'Record Toevoegen
Public Property Let OpdrachtgeverToevoegen(strOpdrachtgeverNaam)
Dim Query As String
pOpdrachtgeverNaam = strOpdrachtgeverNaam
Query = "INSERT INTO Opdrachtgever ([OpdrachtgeverNaam])" & _
" VALUES ('" & OpdrachtgeverNaam & "');"
rs.Open Query, cn
End Property
Deze werkt tot op zeker hoogte...
De query wordt uitgevoerd en het record wordt ook idd aangemaakt.
maar mijn Class_Terminate() is het hier niet zo mee eens... hij loopt vast bij rs.close en geeft de melding:
Fout: 3704 De bewerking is niet toegestaan als het object gesloten is.
naar mijn mening heb ik rs geopend in rs.Open (rs = recordset)
Ik doe dus duidelijk iets verkeerd. maar ik kom er niet achter wat ik precies verkeerd doe...
kan iemand mij daar mee helpen?