Volgnummer

Status
Niet open voor verdere reacties.

omewillem

Gebruiker
Lid geworden
4 jun 2012
Berichten
41
Goedemorgen,
ik weet dat er een hoop te vinden is op het forum over mijn vraag, maar toch lukt het niet om een nieuw record met volgnummer te maken.
ik gebruik de volgende functie bij het openen van een formulier ( bij laden) om in een tbl een opvolgend nummer aan te maken.

Code:
Function VolgNummer() As String
Dim sVeld As String, sTabel As String, sWaarde As String, strSQL As String
Dim arr As Variant
Dim Nummer As Integer, Jaar As Integer
Dim rst As ADODB.Recordset
Dim cnConn As ADODB.Connection

    sVeld = "[Veld1]"            'Hier het veld dat je gebruikt voor het volgnummer.
    sTabel = "[tbl_portcallNumber_2017]"          'Hier de tabelnaam waar het volgnummer in staat.
    
    strSQL = "SELECT TOP 1 " & sVeld & " FROM " & sTabel & " WHERE (" & sVeld & " Is Not Null) ORDER BY " & sVeld & " DESC"
    
    Set cnConn = CurrentProject.Connection
    Set rst = New ADODB.Recordset
    rst.Open strSQL, cnConn, adOpenKeyset, adLockOptimistic, adCmdText
    With rst
        If Not .BOF And Not .EOF Then sWaarde = .Fields(0).Value
        .Close
    End With
    
    If sWaarde & "" = "" Then GoTo GeenNummer
    arr = Split(sWaarde, "-")
    Jaar = CInt(arr(0))
    If Jaar = Year(Date) Then
        Nummer = CInt(arr(1)) + 1
    Else
        Nummer = 1
    End If
    VolgNummer = Jaar & Format(Nummer, "-0000")
    Exit Function
    
GeenNummer:
    VolgNummer = Year(Date) & "-0001"

dus, bij openen form_newCall moet er in de tbl_portcallNumber_2017 een opvolgend nummer gemaakt worden,

ben ik nu echt alle vba codes door elkaar aan het halen, of heb ik ergens typfouten gemaakt?
alvast bedankt voor jullie tijd
gr

wim
 
Laatst bewerkt:
Zou moeten werken, (graag de volgende keer je code opmaken met de CODE knop) maar ik vind de plek waar je hem gebruikt vreemd. Zelf gebruik ik deze functie altijd bij de Standaardwaarde van het veld. Dan wordt het nummer dus gegenereerd als je een nieuw record maakt. Nooit problemen mee.
 
ok, dus ik kan de hele formule kopiëren en plakken in de rij standaard waarde?
ik krijg dan namelijk de foutmelding: De syntaxis van de expressie die u hebt opgegeven, is ongeldig
wat ben ik aan het prutsen, heb jij een idee?
btw ik heb de formule tussen de knoppen gezet, mijn excuus
 
De regel Standaardwaarde krijgt dan niet meer dan dit:
Code:
=VolgNummer()
 
Octafish, zou je aub willen kijken wat ik fout doe?
ik heb in de bijlage 1 frm en 1 tbl gemaakt met de code, maar ik blijf een melding krijgen
bvd

gr

wim
Bekijk bijlage octa 1.zip
 
Laatst bewerkt:
ok, ik heb de oplossing gevonden:
Code:
Function getDigits(s As String) As String
    ' Variables needed (remember to use "option explicit").   '
    Dim retval As String    ' This is the return string.      '
    Dim i As Integer        ' Counter for character position. '

    ' Initialise return string to empty                       '
    retval = ""

    ' For every character in input string, copy digits to     '
    '   return string.                                        '
    For i = 1 To Len(s)
        If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Then
            retval = retval + Mid(s, i, 1)
        End If
    Next

    ' Then return the return string.                          '
    getDigits = retval
End Function
dit is de code voor in een mudule

de volgende het formulier hangen:
Code:
Private Sub Form_Current()
If Me.NewRecord = True Then
    Dim strOldID As String
    Dim lngCurrentNumber As Long
    Dim lngNextNumber As Long
    Dim strNextNumber As String
    Dim strNewID As String
    
    strOldID = DLast("[PortCall]", "tbl_Calls")
    Debug.Print strOldID
    
    lngCurrentNumber = getDigits(strOldID)
    Debug.Print lngCurrentNumber
    
    lngNextNumber = lngCurrentNumber + 1
    Debug.Print lngNextNumber
    
    'takes a number (8) and converts to 0008
    strNextNumber = String(8 - Len(CStr(lngNextNumber)), "0") & CStr(lngNextNumber)
    Debug.Print strNextNumber
    
    strNewID = "Call " & strNextNumber
    Debug.Print strNewID
    
    Me.PortCall = strNewID
End If
End Sub

ik hoop dat ik iemand anders hier ook mee heb kunnen helpen,

gr

wim
 
Ingewikkeld.... Ik heb nog even naar je voorbeeldje gekeken, en de reden dat hij niet werkte was een hele logische: het veld dat je probeerde te vullen was numeriek ingesteld, terwijl je een tekst aanbiedt. Dat kan natuurlijk niet. Je functie kan ook beter, namelijk zo:
Code:
Function VolgNummer() As String
Dim sVeld As String, sTabel As String, sWaarde As String, strSQL As String
Dim arr As Variant
Dim Nummer As Integer, Jaar As Integer
Dim rst As DAO.Recordset

    sVeld = "[Veld1]"            'Hier het veld dat je gebruikt voor het volgnummer.
    sTabel = "[tbl_portcallNumber_2017]"          'Hier de tabelnaam waar het volgnummer in staat.
    strSQL = "SELECT TOP 1 " & sVeld & " FROM " & sTabel & " WHERE (" & sVeld & " Is Not Null) ORDER BY " & sVeld & " DESC"
    Set rst = CurrentDb.OpenRecordset(strSQL)
    With rst
        If Not .BOF And Not .EOF Then sWaarde = .Fields(0).Value
        .Close
    End With
    
    If sWaarde & "" = "" Then GoTo GeenNummer
    arr = Split(sWaarde, "-")
    Jaar = CInt(arr(0))
    If Jaar = Year(Date) Then
        Nummer = CInt(arr(1)) + 1
    Else
        Nummer = 1
    End If
    VolgNummer = Jaar & Format(Nummer, "-0000")
    Exit Function
    
GeenNummer:
    VolgNummer = Year(Date) & "-0001"
End Function
 
Tanks, opgelost:thumb:
gr

wim
 

Bijlagen

  • load form.PNG
    load form.PNG
    27,2 KB · Weergaven: 37
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan