Laufende Nummer für Berichte vergeben

In einer Access-Anwendung für eine Grundschule basieren Abfragen wie »alle Jungen der Klasse 1a« auf einer Tabelle mit allen Daten. Die Berichte enthalten die laufende Nummer des Datensatzes, der von 1 beginnend aufsteigen soll. Wenn ich einzelne Datensätze lösche, kommt es in der Reihenfolge der Nummern zu Lücken, da Access die Datensätze nicht erneut nummeriert. Wie kann ich das ändern?

Die laufende Nummer, die Sie bei der Definition Ihrer Tabelle als Datentyp ausgewählt haben, vergibt Access bei der Anlage eines Datensatzes nur ein einziges Mal automatisch. Sie können diesen Wert nicht mehr ändern. Deshalb eignet er sich für Ihre Anforderungen nicht. Hilfe bringt die VBA-Funktion »currentRecordNr()«, deren Quelltext im Kasten weiter unten steht oder auf der Heft-CD liegt: CHIP-Code LFDNR Damit bestimmen Sie die Position des Datensatzes in der Gruppe, die der Bericht momentan darstellt.

Public Function

currentRecordNr (ReportName As

String) As Long

On Error GoTo

Err_currentRecordNr

Dim rpt As Report

Set rpt =

Reports (ReportName)

currentRecordNr =

rpt.CurrentRecord

Exit_currentRecordNr:

Exit Function

Err_currentRecordNr:

MsgBox Err.Description

Resume Exit_currentRecordNr

End Function
Um die Funktion einzusetzen, öffnen Sie ein Modul Ihrer Datenbank in der Entwurfsansicht und legen mit »Einfügen | Prozedur« die neue Funktion »currentRecordNr« an. Definieren Sie die Funktion als öffentlich und ergänzen Sie den VBA-Quelltext. Im String-Parameter »ReportName« übergeben Sie den Namen des aktuellen Berichtes an die Funktion. Diese erzeugt nun das Objekt »rpt«, das auf den Bericht mit dem übergebenen Namen verweist. Mit der Eigenschaft »CurrentRecord« des Report-Objektes ermitteln Sie die Position des aktuellen Datensatzes in der Gruppe, die durch das Report-Objekt dargestellt wird. Diesen Wert gibt die Funktion zurück. Nun müssen Sie den Rückgabewert noch im Detailbereich Ihres Berichtes ausdrucken: Erzeugen Sie ein neues Textfeld und öffnen Sie dessen »Eigenschaften«. Im Register »Alle« tragen Sie bei »Steuerelementinhalt« den Aufruf »=currentRecordNr("RptName")« ein. Dabei tauschen Sie »RptName« gegen den Namen Ihres Berichtes.