PDA

Vollständige Version anzeigen : laufende nummer (wie autowert)


Dutt
14.02.2003, 13:48
Hallo!
Hab da mal ne frage:
ich habe eine ID (Textfeld, Primärschlüssel)
Wenn ich nun auf den Button neues Produkt anlegen klicke, wechslt er auf das vorgesehene Formular und sollte dabei die letzte ID auslesen und "1" dazu zählen.
Es ist wichtig das das Format auf Textfeld bleibt, bei mir zählt er halt die zahl zur letzten zahle dazu.
bsp:

letzte ID 202
+ 1
= 2021

wisst was ich meine?
und so sieht mien code aus!

Public Sub nextMitarbeiter_Id()
Dim recSetMiId
Dim newMiId As String
DoCmd.GoToRecord , , acNewRec
Set recSetMiId = CurrentDb().OpenRecordset("SELECT Max(MITARBEITER.Mitarbeiter_ID) AS MAXID FROM MITARBEITER")
If Not IsNull(recSetMiId!maxID) And Not (recSetMiId.EOF) Then
newMiId = Left(recSetMiId!maxID, 1)
Dim newStr As String
newStr = Val(Right(recSetMiId!maxID, Len(recSetMiId!maxID) - 1)) + 1
newMiId = newMiId + newStr
Else
newMiId = "0001"
End If
recSetMiId.Close
Mitarbeiter_ID.Value = newMiId

End Sub



HOFFE sehr das ihr mir weiterhelfen könntet!
Gruß Dutt

Nouba
14.02.2003, 14:43
Hallo Dutt,

In Deinem Beispiel fügst Du zwei Zeichenketten aneinander.

In einem globalen Modul könntest Du Folgendes (ungetestet) einfügen und z.B. als DefaultValue das Resultat dieser Funktion verwenden. Wenn diese kreierte Nummer nicht als Personalnummer in Dokumenten verwendet wird, sondern nur für die Verwaltung der DB genutzt wird, würde ich einen Autowert nehmen, der nirgends angezeigt wird. Wer sollte sich all die Nummern merken?!

<pre><font face="Courier New, Courier, monospace" size="3">Public Function NaechsteFreieId( _<br> strObjName As String, _<br> strFeldname As String) As Variant<br> <br>'<br>' z.B.: Me!Mitarbeiter_ID = NaechsteFreieId("MITARBEITER", "Mitarbeiter_ID")<br>' oder als Default Value<br>'<br> Dim rs As DAO.Recordset<br> Dim strSQL As String<br> Dim lngOldMax As Long<br><br> strSQL = "SELECT Max([" &amp; strObjName &amp; "]) FROM [" &amp; strFeldname &amp; "]"<br> Set rs = DBEngine(0)(0).OpenRecordset(strSQL, dbOpenSnapshot)<br><br> With rs<br> lngOldMax = .Fields(0)<br> .Close<br> End With<br><br> Set rs = Nothing<br><br> ' einschränkend - besser und universeller wäre<br> ' die Formatierung im Zielfeld vorzunehmen<br> nextMitarbeiter_Id = Format(lngOldMax + 1, "0000")<br>End Function</font></pre>