Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

ID des zuletzt hinzugefügten Autowertes ermitteln

Viele Anwendungsfälle verlangen danach, die ID eines gerade hinzugefügten Datensatzes zu ermitteln. Dies kann sowohl beim Hinzufügen per DAO (beziehungsweise ADO) also auch per SQL-INSERT INTO-Abfrage der Fall sein. Für beides gibt es Lösungen.

Beispieldatenbank

Eine Beispieldatenbank finden Sie unter folgendem Link:

ID unter DAO ermitteln

Unter DAO legt man neue Datensätze mit der AddNew-Methode an und fügt dann den einzelnen Feldern die gewünschten Werte hinzu. Wenn man anschließend die ID des neu angelegten Datensatzes benötigt, braucht man diese nur auszulesen - sie ist beim Anlegen bereits vorhanden. Allerdings muss man dies vor dem Speichern des Datensatzes mit der Update-Methode erledigen, wie folgendes Beispiel zeigt:

Public Sub PrimaerschluesselwertPerDAO()

    Dim db As DAO.Database

    Dim rst As DAO.Recordset

    

    Set db = CurrentDb

    Set rst = db.OpenRecordset("tblBeispiel", dbOpenDynaset)

    

    rst.AddNew

    rst!Testfeld = "Test"

    

    Debug.Print rst!ID

    

    rst.Update

    rst.Close

    Set rst = Nothing

    Set db = Nothing

End Sub

ID bei INSERT INTO ermitteln

Bei der Verwendung einer INSERT INTO-Abfrage verwenden Sie die SQL-Funktion @@IDENTITY. Das nachfolgende Beispiel zeigt, wie dies funktioniert: Nach dem Anlegen des Datensatzes mit der Execute-Methode von DAO prüft man zunächst mit der RecordsAffected-Eigenschaft, ob einer oder mehrere neue Datensätze angelegt wurden und öffnet dann eine Datensatzgruppe, die lediglich den Wert der @@IDENTITY-Funktion zurückliefert.

Deren Wert gibt dann das erste Feld der Datensatzgruppe (rst(0)) zurück.

Public Sub PrimaerschluesselwertDesNeuestenDatensatzes()

   

    Dim db As DAO.Database

    Dim rst As DAO.Recordset

    Set db = CurrentDb

   

    'Fügt einen neuen Datensatz zu einer Tabelle hinzu

    db.Execute ("INSERT INTO tblBeispiel(Testfeld) VALUES('Test')")

   

    If db.RecordsAffected > 0 Then

   

        'Öffnet eine Datensatzgruppe, die den Wert der Funktion @@IDENTITY zurückliefert

        Set rst = db.OpenRecordset("SELECT @@IDENTITY")

       

        'Gibt den Wert von @@IDENTITY aus

        Debug.Print rst(0)

       

        rst.Close

        Set rst = Nothing

   

    End If

       

    Set db = Nothing

End Sub

Sitzungsabhängig

Das schöne an @@IDENTITY ist, dass es sich jeweils auf die in der aktuellen Sitzung durchgeführten Datenänderungen bezieht - das heißt, dass gleichzeitige Änderungen durch andere Benutzer den zurückgegebenen Wert nicht beeinflussen.

Testen können Sie dies folgendermaßen: Öffnen Sie die Beispielanwendung zweimal, öffnen Sie jeweils den VBA-Editor, setzen Sie einen Haltepunkt auf die Zeile If db.RecordsAffected ... und starten Sie dann mit F5 erst die Prozedur in der ersten, dann in der zweiten Datenbank. Dies schreibt jeweils einen neuen Datensatz. Mit F5 lassen Sie nun die Routine in der ersten Datenbank weiterlaufen und stellen so fest, dass @@IDENTITY  die richtige ID zurückliefert.

© 2003-2015 André Minhorst Alle Rechte vorbehalten.