OK, daar komt ie.
Plak de volgende code in een module:
Option Compare Database
Public Sub subCreateTableFactuur()
Dim strSQL As String
Dim db As Database
strSQL = ""
strSQL = strSQL & "CREATE TABLE tblFactuurNr" & vbCrLf
strSQL = strSQL & "("
strSQL = strSQL & "fldJaar integer, " & vbCrLf
strSQL = strSQL & "fldVolgnr integer" & vbCrLf
strSQL = strSQL & ")"
Set db = CurrentDb
DoCmd.SetWarnings False
db.Execute strSQL, dbFailOnError
DoCmd.SetWarnings True
Set db = Nothing
End Sub
Public Function fnGetNextFactuurNummer(mintJaar As Integer) As Integer
Dim strSQL As String
Dim db As Database
strSQL = ""
'Meegegeven jaar mag niet voor 2000 liggen
If mintJaar < 2000 Then
fnGetNextFactuurNummer = 0
Exit Function
End If
'Controleren of opgegeven jaar al bestaat
If Not fnCheckYearExists(mintJaar) Then
fnGetNextFactuurNummer = 0
Exit Function
End If
'Ophalen en registreren eerstvolgende factuurnummer voor dat jaar.
'Eerst geregistreerde factuurnummer met 1 ophogen.
strSQL = "UPDATE tblFactuurNr" & vbCrLf
strSQL = strSQL & "SET fldVolgnr = fldVolgnr + 1" & vbCrLf
strSQL = strSQL & "WHERE fldJaar = " & CStr(mintJaar) & ";"
Set db = CurrentDb()
DoCmd.SetWarnings False
db.Execute strSQL, dbFailOnError
DoCmd.SetWarnings True
Set db = Nothing
'Ophalen factuurnummer
fnGetNextFactuurNummer = DMax("fldVolgnr", "tblFactuurNr", "fldJaar = " & CStr(mintJaar))
End Function
Public Function fnCheckYearExists(mintJaar As Integer) As Boolean
Dim strSQL As String
Dim db As Database
On Error GoTo fnCheckYearExists_Error
strSQL = ""
fnCheckYearExists = False
If DCount("fldJaar", "tblFactuurNr", "fldJaar = " & CStr(mintJaar)) < 1 Then
strSQL = "INSERT INTO tblFactuurNr" & vbCrLf
strSQL = strSQL & "VALUES(" & CStr(mintJaar) & ", 0);"
Set db = CurrentDb()
DoCmd.SetWarnings False
db.Execute strSQL, dbFailOnError
DoCmd.SetWarnings True
Set db = Nothing
End If
fnCheckYearExists_OK:
fnCheckYearExists = True
Exit Function
fnCheckYearExists_Error:
fnCheckYearExists = False
Exit Function
End Function
Maak nu eerst de tabel tblFactuurNr door de subroutine subCreateTableFactuur uit te voeren.
Je kunt nu de functie fnGetNextFactuurNummer(param) gebruiken om het eerstvolgende factuurnummer op te halen. De parameter param moet dan het jaartal bevatten van de betreffende factuur.
Simpel toch?