GUIDs

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Normalerweise verwenden Sie zur eindeutigen Kennzeichnung eines Datensatzes in einer Tabelle einen numerischen Primärschlüssel, der inkrementell für jeden neuen Datensatz erhöht wird. Manchmal reicht dies allerdings nicht aus – zum Beispiel dann, wenn es mehrere Kopien der Datenbank gibt, in denen Datensätze hinzugefügt und anschließend zusammengeführt werden müssen. Die Anforderung ist durchaus realistisch – es gibt erstens nicht immer und überall Internetzugriff, und zweitens will längst nicht jedes Unternehmen seine Datenbank über das Internet verfügbar machen. Die Lösung für die problemlose Zusammenführung der Daten sind Primärschlüssel, die weltweit eindeutig sind – und dies erreichen Sie mit den sogenannten GUIDs.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1401_GUIDs.mdb.

Die GUID

GUID ist die Abkürzung für Globally Unique Identifier. Während herkömmliche Primärschlüsselfelder normalerweise mit numerischen Werten des Datentyps Long gefüllt werden, was einem Wertebereich von -2.147.483.648 bis 2.147.483.647 entspricht (also insgesamt 2 hoch 32 Werten und einem Speicherplatz von 4 Byte entspricht, belegt ein GUID-Wert 16 Byte Speicher. Damit lassen sich allerdings auch eine ganze Reihe mehr Werte erzeugen.

Wie ist eine GUID nun aufgebaut? Sie besteht aus 32 Buchstaben beziehungsweise Zahlen, wobei die Zahlen von 0 bis 9 und die Buchstaben von A bis F verwendet werden (entsprechend dem hexadezimalen System). Die 32 Zeichen werden typischerweise in einer bestimmten Anordnung notiert, die etwa so aussieht und in geschweifte Klammern eingefasst wird:

{9E0C0079-213E-48F5-9432-BC17E2D2CB9F}

Zwei Zeichen ergeben jeweils ein Byte, sodass die Anordnung bezüglich der Anzahl der verwendeten Bytes wie folgt aussieht:

4-2-2-2-6

Weltweit eindeutig?

Was aber macht eine GUID nun weltweit eindeutig und somit zu einem bevorzugten Primärschlüsselwert, wenn es zum die Aufteilung und Synchronisierung von Datenbanken geht? Die Eindeutigkeit ist nur gewährleistet, wenn die GUID durch einen Rechner erzeugt wird, der eine Ethernet-Netzwerkkarte verwendet. Wenn Sie sich selbst GUIDs ausdenken, können Sie natürlich leicht zwei gleiche Bytefolgen erzeugen – Gleiches gilt, wenn Sie einen eigenen Algorithmus zur Erstellung von GUIDs verwenden.

Um die Eindeutigkeit zu gewährleisten, wird ein Teil der GUID in Abhängigkeit von der physikalischen Adresse der Ethernet-Netzwerkkarte erzeugt, ein anderer Teil wir inkrementell erhöht – so ist, die Eindeutigkeit der Adresse der Ethernetkarte vorausgesetzt, die doppelter Vergabe einer GUID ausgeschlossen.

GUIDs als Autowert

Es gibt zwei Möglichkeiten, eine GUID zu erzeugen. Die erste liefert Access von Haus aus mit – es handelt sich hierbei um die Möglichkeit, Autowerte des Typs Replikations-ID zu erzeugen. Dazu legen Sie ein Feld einer Tabelle, etwa das Primärschlüssel, mit dem Datentyp Autowert und der Feldgröße Replikations-ID an (siehe Bild 1).

Tabelle mit einem GUID-Feld

Bild 1: Tabelle mit einem GUID-Feld

Wenn Sie nun in die Datenblattansicht wechseln und einige neue Datensätze anlegen, zeigt das Feld GuidID frisch erzeugte GUID-Werte an (siehe Bild 2).

GUID-Werte einer Tabelle

Bild 2: GUID-Werte einer Tabelle

Aber warum eigentlich Replikations-ID? Dies ist in einer von den aktuellen Versionen von Access nicht mehr unterstützten Technik begründet. Früher konnten Sie Access-Datenbanken replizieren und wieder synchronisieren, das heißt, dass Access Funktionen angeboten hat, mit denen Sie mehrere Versionen (Replikate) einer Datenbank erstellen konnten. Diese haben etwa Außendienstmitarbeiter zur Erfassung von Kunden, Aufträgen et cetere verwendet. Später wurden die ermittelten Daten per Synchronisation wieder zu einer Datenbank zusammengeführt.

GUID per API

Es gibt auch eine API-Funktion, mit der Sie GUIDs erstellen können. API-Funktionen sind Windows-Funktionen, die Sie aber auch von VBA aus verwenden können (mehr dazu in einem weiteren Artikel). Windows verwendet GUIDs beispielsweise in der Registry (die Sie mit dem Befehl RegEdit im Startmenü von Windows anzeigen und bearbeiten können), wie Bild 3 zeigt.

GUIDs in der Registry von Windows

Bild 3: GUIDs in der Registry von Windows

Um eine GUID per VBA zu erzeugen, benötigen Sie zunächst die Deklaration der zu verwendenden API-Funktion. Diese fügen Sie am besten in ein Standardmodul ein (in der Beispieldatenbank unter den Namen mdlGUID zu finden):

Private Declare Function CoCreateGuid Lib "ole32.dll" (tGUIDStructure As GUID) As Long

Außerdem benötigen Sie eine weitere API-Funktion als Hilfsfunktion, die Sie an gleicher Stelle deklarieren:

Private Declare Function StringFromGUID2 Lib "ole32.dll" (rGUID As Any, ByVal lpstrClsId As Long, ByVal cbMax As Long) As Long

Die API-Funktion CoCreateGuid liefert die GUID in Form eines Type-Objekts, dass Sie zuvor noch deklarieren müssen. Die folgende Deklaration landet ebenfalls im Standardmodul mdlGUID:

Private Type GUID

     Data1 As Long

     Data2 As Integer

     Data3 As Integer

     Data4(0 To 7) As String * 1

End Type

Die Funktion GUIDErzeugen aus Listing 1 erzeugt schließlich eine GUID. Dazu deklariert die Prozedur zunächst eine Konstante namens cLngLen zum Speichern der Länge der Zeichenkette der GUID, eine Variable namens strGUID, welche die GUID aufnehmen soll, eine Variable namens typeGUID, die ein Objekt des zuvor deklarierten Typs GUID aufnimmt und ein Array des Datentyps Byte mit dem Namen bytGuid(). Die Long-Variable lngReturn schließlich nimmt das Ergebnis der Funktion CoCreateGUID auf.

Function GUIDErzeugen() As String

     Const clngLen As Long = 38

     Dim strGUID As String

     Dim typeGUID As GUID

     Dim bytGuid() As Byte

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!