De laatste tijd ben ik een aantal problemen tegenkomen waarbij ik als parameter van een functie alleen een beperkt aantal verschillende waardes wil meegeven. Dit riekt dus naar een enum
.
Maar dat is (uiteraard) geen probleem. Het probleem is dat ik eigenlijk een enum van strings wil maken. Het volgende voorbeeld illustreerd het een en ander:
De parameter sField van de functie updateDatabase kan dus maar een beperkt aantal waardes hebben (nl. alleen de velden die voorkomen). De namen van de elementen uit de enumaration zijn ook de namen van de velden in de DB (om het simpel te houden).
Dit gaat zo natuurlijk niet werken. Om dit werkend te krijgen zie ik twee oplossingen:
1) Ik kan natuurlijk de veldnaam als string meegeven, maar dan moet je de database structuur er naast houden en da's natuurlijk niet zo netjes
.
2) Ik kan ook steeds gaan testen op de waarde van de variabele en die zelf omzetten naar een string, dus:
Maar dit is wel heel veel code, en bij meer dan 10 velden heel moeilijk te onderhouden
Nu is mijn vraag: Hoe kan dit makkelijk en mooi opgelost worden
Maar dat is (uiteraard) geen probleem. Het probleem is dat ik eigenlijk een enum van strings wil maken. Het volgende voorbeeld illustreerd het een en ander:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| Option Explicit
Private Enum enumTest
fieldTest
fieldTwee
fieldDrie
End Enum
Private Sub updateDatabase(sField As enumTest, sNewValue As String)
Dim sSQL As String
sSQL = "UPDATE tabel " & _
" SET " & _
sField & " = '" & sNewValue & "'"
'Execute sSQL
End Sub |
De parameter sField van de functie updateDatabase kan dus maar een beperkt aantal waardes hebben (nl. alleen de velden die voorkomen). De namen van de elementen uit de enumaration zijn ook de namen van de velden in de DB (om het simpel te houden).
Dit gaat zo natuurlijk niet werken. Om dit werkend te krijgen zie ik twee oplossingen:
1) Ik kan natuurlijk de veldnaam als string meegeven, maar dan moet je de database structuur er naast houden en da's natuurlijk niet zo netjes
2) Ik kan ook steeds gaan testen op de waarde van de variabele en die zelf omzetten naar een string, dus:
code:
1
2
3
4
5
6
7
8
9
10
| Select Case sField
Case fieldTest
sFieldName = "fieldTest"
Case fieldTwee
sFieldName = "fieldTwee"
Case fieldDrie
sFieldName = "fieldDrie"
End Select |
Maar dit is wel heel veel code, en bij meer dan 10 velden heel moeilijk te onderhouden
Nu is mijn vraag: Hoe kan dit makkelijk en mooi opgelost worden