unieke code/nr toevoegen maar niet via automatische nummering

Status
Niet open voor verdere reacties.

Friend

Verenigingslid
Lid geworden
31 jan 2009
Berichten
1.137
Beste forummers,

Ik heb een formulier "frmNaw" en een formulier "frmKleuren" met uiteraard 2 tabellen "tblNaw" en "tblKleuren"

Nu open ik in het formulier "frmNaw" middels een opdrachtknop het "frmKleuren".
Ik wil alleen de records kleuren zien van de persoon die op dat moment in het "frmNaw" openstaat.

Hier gebruik ik voor de volgende code :

Code:
Private Sub opdrfrmKleuren_Click()
On Error GoTo Err_pdrfrmKleuren_Click
 
    Dim stDocName As String
    Dim stLinkCriteria As String
 
    stDocName = "frmKleuren"
    
    stLinkCriteria = "[objectuniek]=" & "'" & Me![uniekobjnr] & "'"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
 
Exit_pdrfrmKleuren_Click:
    Exit Sub
 
Err_pdrfrmKleuren_Click:
    MsgBox Err.Description
    Resume Exit_pdrfrmKleuren_Click
    

End Sub

Nu wilde ik graag de (unieke) autonummering gebruiken van de "tblNaw" alleen dan krijg ik de melding dat de criteria niet overeenkomen.

Dat klopt natuurlijk ook want beiden velden kunnen dacht ik alleen maar tekst zijn.

Hoe kan ik toch automatisch in de "tblNaw" een uniek nummer of omschrijving/code toevoegen. Zodat ik deze niet zelf behoef te verzinnen of ophogen.

Ik gebruik ook geen klant of relatienummers anders zou ik deze hiervoor gebruiken.

Friend
 
Laatst bewerkt:
Wat is je vraag precies? Zoals ik het nu lees zoek je een procedure om unieke volgnummers te maken zonder gebruik te maken van Autonummering. En zo'n functie is wel makkelijk (ach, wat heet makkelijk ;) ) zelf te maken. Hier een voorbeeldje.
 
Michel,

Bedankt voor je reactie:thumb:

Ja het klopt ik zoek een procedure om unieke volgnummers te maken zonder gebruik te maken van Autonummering.

Dus met jouw link kom ik bij een mooi stukje code van jou :). Nu is mijn vraag waar plaats ik die precies want ik ben de weg weer even kwijt :o

Het veld waar ïk graag het unieke volgnummer in wil zetten is "uniekobjnr" op het formulier "frmObjecten"

Hoor graag van je.

Friend
 
Dan ben je een eind op de goede weg :). De voorbeeldfunctie maakt overigens nummers op basis van een specifiek veld (KlantID). Dat hoeft natuurlijk niet, je kunt ook continue doorlopende volgnummers genereren. Er verandert dan niks, behalve dat je geen filter (WHERE deel) nodig hebt. Je haalt dan met TOP 1 de hoogste waarde op en verhoogt die.
Als je een werkende functie hebt, dan zet je die in het tekstveld txtUniekObjNr als Standaardwaarde. =NieuwVolgnummer() zet je daar dus neer. Bij elk nieuw record dat je vervolgens aanmaakt, krijg je een opgehoogd nummer. Sla je het record niet op, dan is er niks aan de hand, dan kun je het nummer gewoon bij een volgend record ophogen. Je krijgt dus geen 'gaten' in de nummering.
 
Michel,

Ik kom er niet helemaal uit.:o

Zou je mijn aanpassing van de code willen nalopen?

Code:
Function NieuwVolgNummer(uniekobjnr As Integer) As String
Dim strSQL As String, sNum As String
Dim tmp As Variant

strSQL = "SELECT Top 1 [uniekobjnr] FROM [tblObjecten] "
'strSQL = strSQL & "WHERE [uniekobjnr] =" & Me.uniekobjnr & " Order By [Rotatienummer] Desc"

With CurrentDb.OpenRecordset(strSQL)
    If .RecordCount > 0 Then
'        tmp = Split(.Fields(0), "-")
        sNum = Right("0000" & CInt(tmp(UBound(tmp))) + 1, 4)
'        NieuwVolgNummer = tmp(LBound(tmp))& "-" & sNum
        NieuwVolgNummer = tmp(LBound(tmp))
    Else
        NieuwVolgNummer = tmp(LBound(tmp)) & "-0001"
    End If
End With
    
End Function

Het veld op het formulier = "uniekobjnr" op het formulier frmObjecten. Tabel "tblObjecten"

Friend
 
Hoe moet het nummer er uit zien?
 
Michel,

Het mag wat mij betreft bij 1 beginnen. Uiteindelijk totaal 6 postities.

Friend
 
Michel,

Heb je toevallig nog gelegenheid gehad om hier nog naar te kijken??

Friend
 
Ik wilde eigenlijk weten welk format je code moet hebben. Geef dus eens een voorbeeldje van een nummer.
 
Michel,

Ik zou graag een format van 7 posities, de eerste 2 posities van het jaar en de laatste 5 posities voor het volgnummer dus bv 1500001 hebben.

Maar als dat te veel werk voor je is, te moeilijk voor jou geloof ik namelijk niet in ;), dan ben ik al heel blij met 5 posities, zonder jaar, en dan 00001.


Friend
 
Dit soort functies maak ik tegenwoordig inderdaad met mijn ogen dicht :).
Code:
Function NieuwVolgNummer() As String
Dim strSQL As String, Num As Integer
Dim tmp As Variant
Dim rs As Recordset

strSQL = "SELECT Top 1 [Volgnummer] FROM [tblObjecten] WHERE Left([Volgnummer],2)=" _
    & Right(Year(Date), 2) & " ORDER BY [Volgnummer] DESC"
    With CurrentDb.OpenRecordset(strSQL)
        If .RecordCount > 0 Then
            Num = Right(.Fields(0), 5) + 1
            sNum = Right(Year(Date), 2) & Right("00000" & Num, 5)
            NieuwVolgNummer = sNum
        Else
            NieuwVolgNummer = Right(Year(Date), 2) & "00001"
        End If
    End With
End Function
 
Michel,

Super, dat werkt perfect :d:d

Hartelijk dank :thumb:

Friend
 
Michel,

Werkend met jouw code naar volle tevredenheid :) komen er toch weer nieuwe ideeën boven drijven.

Is het ook mogelijk om in de code te verwerken dat er standaard een (bv) C voor het volgnummer staat.

Ik kan natuurlijk dit via verborgen velden uiteindelijk wel realiseren, alleen het lijkt het mij zo mooi als dit gewoon in de code staat.

Hoor graag van je.

Friend
 
Verborgen velden? Die truc ken ik niet :). Ach, kan ik ook weer wat leren :D.
Code:
Function NieuwVolgNummer() As String
Dim strSQL As String, Num As Integer
Dim tmp As Variant
Dim rs As Recordset
strSQL = "SELECT Top 1 [Volgnummer] FROM [Leden] WHERE Mid([Volgnummer], 2, 2)=" _
    & Right(Year(Date), 2) & " ORDER BY [Volgnummer] DESC"
    With CurrentDb.OpenRecordset(strSQL)
        If .RecordCount > 0 Then
            Num = Right(.Fields(0), 5) + 1
            sNum = "C" & Right(Year(Date), 2) & Right("00000" & Num, 5)
            NieuwVolgNummer = sNum
        Else
            NieuwVolgNummer = "C" & Right(Year(Date), 2) & "00001"
        End If
    End With
End Function
 
Michel,

Hartelijk dank voor je reactie :thumb::thumb:

Dat werkt weer fantastisch :)

Hartelijk dank :)

Dit:
Code:
 sNum = "C" & Right(Year(Date), 2) & Right("00000" & Num, 5)
            NieuwVolgNummer = sNum
        Else
            NieuwVolgNummer = "C" & Right(Year(Date), 2) & "00001"
had ik ook geprobeerd.

Maar hier :
Code:
strSQL = "SELECT Top 1 [Volgnummer] FROM [Leden] WHERE Mid([Volgnummer], 2, 2)=" _
    & Right(Year(Date), 2) & " ORDER BY [Volgnummer] DESC"

verander jij Left in Mid + , 2 erbij.

Zou je misschien willen uitleggen wat de code daar precies doet?

Friend
 
De oude code ging uit van cijfers en die haalde dus de eerste 2 tekens uit het volgnummer (Left([Volgnummer],2) om ze te vergelijken met het huidige jaar. Maar dat werkt niet meer als je er een letter voor zet: 150002 wordt dan namelijk C150002. Pak je dan nog steeds de eerste 2 tekens, dan pak je C1. Vandaar dat ik dat moest veranderen naar Mid. Daarmee haal je uit een string een aantal tekens op, waarbij je met het eerste getal de startpositie aangeeft en met het tweede de hoeveelheid tekens. Mid([Volgnummer], 2, 2) kijkt dus naar het veld, begint dan bij het 2e teken en pakt er dan 2. En dan krijg je weer het getal 15. De aanpassing is dus eigenlijk relatief simpel :).
 
Michel,

Helder, duidelijk :thumb:

Veel dank.

Friend
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan