Tabellen mit bigint-Primärschlüssel in Access verknüpfen

February 26, 2008 15:08 by Andre Loker

Für ein Projekt benötigten wir folgendes Szenario: eine SQL Server Datenbank sollte mittels ODBC für Access verfügbar gemacht werden. Eine der Tabellen sollte dann in Access verwendet werden. Dazu bietet Access zwei Optionen:

  • Daten aus der Tabelle importieren. Hierbei wird der Inhalt der Tabelle in eine lokale Access-Datenbank kopiert
  • Tabelle mit der Access Datenbank verknüpfen. Hier wird lediglich eine Verknüpfung mit der Tabelle im SQL Server hergestellt, sodass die Daten immer aktuell sind.

Die erste Möglichkeit funktionierte auch tadellos, beim Verknüpfen der Tabelle trat jedoch ein Problem auf: sämtliche Spalten aller Reihen enthielten statt der erwarteten Werte nur ein "#gelöscht" (bzw. #deleted oder #verwijderd, je nach Sprachversion). Nach einigem Suchen sind wir darauf gestoßen, dass das Problem darin bestand, dass die Tabelle als Primärschlüssel einen bigint Datentypen verwendete. Damit kam Access bzw. der JET Treiber nicht zurecht und interpretiert den Schlüssel als Binärdaten bzw. als Text. KB321901 erwähnte dieses Problem bereits im Juni 2004. Warum Microsoft es bisher nicht geschafft hat, dieses Problem zu lösen, ist mir schleierhaft.

Auf der Suche nach einem Workaround wurde ich in einem Forenbeitrag fündig: man erstellt einfach eine Sicht (View) der gewünschten Daten und konvertiert in dieser Sicht den Primärschlüssel in einen varchar.

   1: CREATE VIEW vwTheTable AS 
   2: SELECT CAST(ID AS varchar(20)) AS AccessID, *
   3: FROM TheTable

Die Sicht kann man dann in Access verknüpfen. Wird man dabei nach dem Primärschlüssel gefragt, so wählt man die Spalte AccessID aus. Lesezugriff und Updates sollten damit funktionieren. Inserts haben wir bisher nicht getestet. Sollte Access dennoch die alte ID Spalte als Primärschlüssel auswählen, kann man die Spalte beim Erstellen der Sicht weglassen.