ODBC-Verbindung

Ich wurde auf dem letzten ESRI-Anwendertreffen der GI Augsburg angesprochen auf joins und was das denn sei. Diese Frage kam von einer Studienkollegin, die Harvester-Einsätze koordiniert und dabei ein mobiles GIS verwendet. Ich versprach ihr eine kleine Lösung hierfür ins Netz zu stellen. Et voila.:

Der Vorteil einer ODBC-Verbindung des joins gegenüber eines direkten joins ergibt sich aufgrund der Darstellbarkeit von Abfragen. Abfrageergebnisse werden also im GIS sofort nach der Erstellung in der Datenbank im GIS aktualisiert und visualisiert. Die ODBC-Schnittstelle fungiert dabei als Treuhänder für SQL-Statements, sodaß die ausgegebenen Daten nie direkt aus der Datenbank stammen.

Beispiele hierfür sind sich stetig verändernde Projektdaten, wie Realisierungs-%, Entnahmemengen durch Holzeinschlag oder aber auch Status der Holzabfuhr bei Poltern.

Benötigt werden nur eine *.mdb-Datenbank und ein ArcMap-Projekt mit räumlichen Daten (als Shapefile oder als Geodastabase). Die Voraussetzung für dei ODBC-Verbindung sind bei jeder Windows-Version gegeben.

1. Erstellung einer Access-Datenbank

In diesem Beispiel verwenden wir eine Access2007-Datenbank namens Nachweisung.accdb, die mit dem Passwort: "Bingelkraut" verschlüsselt ist und drei Tabellen beinhaltet, welche alle mit dem Feld "Waldort_ID" verbunden sind. Auf eine eigene Rechtevergabe verzichten wir vorerst. (Stichwort "System.mdw").

Zu beachten ist, daß die Felder, auf denen der join später basieren soll die selben Werte, Datengröße und Datentyp aufweist.

Um für eine stetige Verbindung sorgen zu können sollte die Datenbank am besten in einem festen Unterverzeichnis des Projektes abgelegt werden.

In ArcMap muss später nur eine Verbindung zu einem Feld in der Datenbank hergestellt werden - die Beziehungen innerhalb der Datenbank funktionieren weiterhin.

2. Der Arbeitsgruppe beitreten

unter Access 2003:
In MS Access im Menu Extras → Sicherheit → Arbeitsgruppenadministrator → beitreten → SYSTEM.MDW im Verzeichnis C://Windows/System32/system.mdw auswählen → OK

unter Access 2007 (s.a. http://support.microsoft.com/kb/918583):
- Makros aktivieren: Office Button (ganz links oben) → Access Options → (untere Leiste) → Trust Center → Trust Center Settings → Macro Settings → enable all Macros - Arbeitsgruppenadministratortool starten: [STRG+G] → folgenden Code eintippen:

DoCmd.RunCommand acCmdWorkgroupAdministrator
  • Im Arbeitsgruppenadministratortool: Join → SYSTEM.MDW  im Verzeichnis C:⁄Windows/System32/system.mdw auswählen → OK

3. Erstellung der ODBC-Verbindung in Windows XP

  • Start → Einstellungen → Systemsteuerung → Verwaltung → Datenquelle (ODBC) Hinzufügen→ „Microsoft Access Driver (*.mdb, *.accdb) → fertigstellen
  • Datenquellenname: „Nachweisung“, Beschreibung: „ODBC-Beispiel“, Datenbank → Auswählen: C:⁄GIS⁄ODBC-Beispiel⁄Nachweisung.accdb
  • Systemdatenbank → none
  • Erweitert → Anmeldename und Kennwort angeben (hier reicht das Kennwort aus!) → OK → OK → OK

4. Aktivierung der ODBC-Verbindung in ArcCatalog

  • In ArcCatalog: Database Connections  → Add OLE DB Connection → Tab“Provider”: Microsoft OLE DB Provider for ODBC Drivers
  • Tab “Verbindung”:  Datenquellenname verwenden “Nachweisung”, Anfangskatalog: „C:⁄GIS⁄ODBC-Beispiel⁄Nachweisung → OK
  • Die Neue Verbindung in „ODBC-Beispiel.odc“ umbenennen

5. Erstellung eines ArcMap-Projektes

Alle Shapefiles, auf denen der join basieren soll, per drag and drop aus ArcCatalog in das Inhaltsverzeichnis hinzufügen.

6. Erstellung eines joins in ArcMap

Rechtsklick auf den Kartenlayer, an die die Werte aus der Datenbank angehängt werden sollen → "joins and relates" → "join..." → "Join attributes from a table"

  1. Das Feld des GIS-Features, auf welches der join basieren soll lautet: "Waldort_ID"
  2. Die Tabelle aus der Access-Datenbank auswählen - z.B. Database Connections⁄ODBC-Beispiel.odc⁄Waldort
  3. Das Feld der Tabelle aus der Access-Datenbank auswählen - in diesem Fall wie oben "Waldort_ID"
  4. "Keep all records", sodaß keine GIS-Features verloren gehen, die nicht in der Access-Datenbank auftauchen.