Access meldet bei einem GUID-Schlüssel „Datensatz ist gelöscht“
In einer verknüpften Tabelle, deren Schlüssel vom Typ uniqueidentifier ist, zeigt das Datenblatt
#Gelöscht in jeder Zeile, oder Ändern und Löschen scheitern mit Fehler 3167 „Datensatz ist
gelöscht“. Ein Formular, das mit einer Bedingung auf die GUID geöffnet wird, bleibt leer; ein
Unterformular, das über die GUID verknüpft ist, zeigt keine Sätze. Filter, Zählen und DLookup über
dieselbe Tabelle liefern dagegen richtige Ergebnisse.
Umgebung
Access (ACCDB, ACCDE und Access-Runtime) mit einem Treiber vor der Version 0.6.0. Tabellen mit ganzzahligem oder Text-Schlüssel sind nicht betroffen.
Ursache
Access lädt die Sätze einer verknüpften Tabelle über ihren Schlüssel nach. Dazu liest es den
Schlüssel zweimal – einfach und mit vollem Namen (SELECT "Id", "dbo"."Tabelle"."Id") – und
bildet seine Lesezeichen aus der zweiten Spalte. Ältere Stände des Treibers füllten bei einer
doppelt gewählten Spalte nur die erste, und sie lieferten die GUID an Access, das sich als ODBC-2-
Anwendung anmeldet, nicht als Text. Access hielt dadurch jeden Schlüssel für leer, fragte
WHERE "Id" IS NULL und fand keinen Satz.
Behebung
- Installieren Sie die aktuelle Version des Treibers in der Bitbreite von Office (siehe Den Treiber verteilen).
- Schließen Sie Access und öffnen Sie die Datenbank neu; die Verknüpfungen müssen nicht neu angelegt werden.
Prüfung
Öffnen Sie die verknüpfte Tabelle als Datenblatt: Die Sätze erscheinen mit ihren Werten. Ändern Sie einen Wert und verlassen Sie den Satz – er wird gespeichert, eine fremde Änderung dazwischen meldet Access als Schreibkonflikt (3197).