Access - Benutzerdefinierte Zähler

Benutzerdefinierte Zähler

In vielen Fällen leistet die AutoWert-Funktion von Access nützliche Dienste. Man kann z.B. Kundennummern automatisch vergeben, wobei der Zählerwert mit jedem neuen Datensatz jeweils um 1 hochgezählt wird. Es gibt allerdings auch Situationen, in denen man einen Zähler in anderen Schrittweiten vergeben möchte. Das wird von Access standardmäßig nicht unterstützt.

Lösung: Bei der Auslösung des Ereignisses "BeforeInsert" (Bei der ersten Eingabe in einen neuen Datensatz) wird eine VBA-Funktion aufgerufen, die aus einer vorher eingerichteten Tabelle den nächsten verfügbaren Zähler ausliest, in das gewünschte Feld einträgt und anschließend den neuen Zählerwert wieder zurückschreibt. Um diese Technik an einem kleinen Beispiel auszuprobieren, gehen Sie folgendermaßen vor:

Eine neue Datenbank erstellen und eine neue Tabelle mit dem Namen "Artikel" anlegen. Es bietet sich an, zu diesem Zweck die gleichnamige Tabelle aus der Beispieldatenbank NORDWIND.MDB zu importieren. Wenn man diese Möglichkeit nicht nutzen will, muss man darauf achten, dass die Tabelle ein Feld mit dem Namen "Artikel-Nr" enthält.

Dann eine neue Tabelle "tblZaehler" anlegen, die nur ein einziges Feld mit dem Namen "NaechsterZaehler" enthält. Dieses Feld als Primärschlüssel definieren und "10000" als Wert für den nächsten zu vergebenden Zähler festlegen.

Ein Formular "frmArtikel" auf Basis der Tabelle "Artikel" erstellen. Für den Test genügt es, wenn man das Feld "Artikel-Nr" und "Artikelname" übernimmt. Für das Feld "Artikel-Nr" die Eigenschaften "Aktiviert" auf "Nein" und "Gesperrt" auf "Ja" setzen. Auf diese Weise verhindert man, dass die Nummer manuell geändert wird, denn die Vergabe soll ja automatisch erfolgen. Dann folgende Prozedur in das Klassenmodul des Formulars eingeben (bitte auf die unterschiedlichen Listings für Access 97 sowie Access 2000/2002 achten):

für Access 97:

Private Sub Form_BeforeInsert(Cancel As Integer)
Dim lngZaehler As Long, db As Database, rst As Recordset
On Error GoTo Ende
  Set db = CurrentDb()
  Set rst = db.OpenRecordset("tblZaehler")
  rst.Edit
  lngZaehler = rst("NaechsterZaehler")
  rst("NaechsterZaehler") = lngZaehler + 100
  rst.Update
  Me.[Artikel-Nr] = lngZaehler
  Exit Sub
Ende:
  MsgBox "Der folgende Fehler ist aufgetreten: " & Err.Number & " - " & _
  Err.Description, vbCritical + vbOKOnly, "Benutzerdefinierter Zähler"
End Sub

für Access 2000 und 2002:

Private Sub Form_BeforeInsert(Cancel As Integer)
Dim lngZaehler As Long, rst As ADODB.Recordset
On Error GoTo Ende
  Set rst = New ADODB.Recordset
  Set rst.ActiveConnection = CurrentProject.Connection
  rst.CursorType = adOpenKeyset
  rst.LockType = adLockOptimistic
  rst.Source = "tblZaehler"
  rst.Open
  lngZaehler = rst.Fields("NaechsterZaehler").Value
  rst("NaechsterZaehler") = lngZaehler + 100
  rst.Update
  rst.Close
  Me.[Artikel-Nr] = lngZaehler
  Exit Sub
Ende:
  MsgBox "Der folgende Fehler ist aufgetreten: " & Err.Number & " - " & _
  Err.Description, vbCritical + vbOKOnly, "Benutzerdefinierter Zähler"
End Sub

Wenn man nun in die Formularansicht wechselt und einen neuen Datensatz anlegt, wird automatisch 10000 als Artikel-Nummer festgelegt, sobald man etwas in das Feld "Artikelname" eingibt. Im nächsten Datensatz ergibt sich dann entsprechend der Wert 10100, anschließend 10200, 10300 usw.

Um benutzerdefinierte Zähler in eigenen Anwendungen zu nutzen, geht man folgendermaßen vor: Wie oben beschrieben eine Tabelle "tblZaehler" mit dem Feld "NaechsterZaehler" anlegen und den gewünschten Startwert eingeben. Klassenmodul des Formulars öffnen, in dem der Zähler vergeben werden soll und das zu Ihrer Access-Version passende Listing erfassen. In der Prozedur "Artikel-Nr" durch den Namen des Feldes auf Ihrem Formular, in das die Prozedur den nächsten Zählerwert eintragen soll, ersetzen. Bei Bedarf die vorgegebene Schrittweite von "100" durch den gewünschten Wert anpassen.

Mehr Tipps: Access - Datensätze im Formular erzwingen

Sponsoren und Investoren

Sponsoren und Investoren sind jederzeit herzlich willkommen!
Wenn Sie die Information(en) auf dieser Seite interessant fanden, freuen wir uns über eine kleine Spende. Empfehlen Sie uns bitte auch in Ihren Netzwerken (z. B. Twitter, Facebook oder Google+). Herzlichen Dank!

Nach oben Sitemap
Impressum & Kontakt