Access GUID: Die Geheimnisse

Die Vergabe von Primärschlüsseln spielt bei der Definition von Tabellen eine zentrale Rolle. Bei modernen Datenbankanwendungen hat es sich inzwischen durchgesetzt, anstelle von (teilweise kombinierten) Merkmalen eines Datensatzes einen numerischen Primärschlüssel zu verwenden. Dies belegt zwar zusätzlichen Speicherplatz, vereinfacht aber die Datenabfrage und damit die Entwicklung von Anwendungen erheblich. Einen noch größeren Vorteil verschafft Ihnen der Einsatz von Access GUIDs.

Bei einer GUID (Globally Unique Identifier) handelt es sich im Prinzip um eine normale Zahl, die jedoch nicht wie die normalen AutoWert-Felder von Access 4 Byte an Speicherplatz, sondern insgesamt 16 Byte belegt. Der Vorteil besteht darin, dass eine 16 Byte große Zahl einen sehr großen Wertebereich abdeckt.

Eine GUID macht sich diesen Vorteile zunutze, um eine “in Zeit und Raum” eindeutige Nummer zu vergeben. Microsoft sichert beispielsweise zu, dass eine einmal generierte GUID auf der Welt nicht ein zweites Mal generiert wurde oder wird.

Um dies sicherzustellen, besteht eine GUID aus mehreren Teilen. Einer dieser Teile ergibt sich hierbei aus der physikalischen Hardware-Adresse Ihrer Ethernet-Netzwerkkarte. Da diese Hardware-Adresse weltweit eindeutig vergeben und auf jeder Netzwerkkarte unterschiedlich ist, ist auch eine GUID, die auf dieser Adresse basiert, immer eindeutig.

Sollte in Ihrem Rechner keine Ethernet-Karte eingebaut sein, ermittelt Ihr PC einmalig eine Zufallszahl als Basis. Bei dieser Zufallszahl ist der Wertebereich so groß, dass die Wahrscheinlichkeit einer doppelten GUID extrem gering ist.

Ein anderer Teil der GUID wird fortlaufend hoch gezählt, sodass hier eine doppelte Vergabe ausgeschlossen ist.

Bereits normale AutoWert-Zahlen haben aufgrund des 32-Bit (= 4 Byte)-Speicherbedarfs einen Wertebereich von -2.147.483.648 bis +2.147.483.648. Würde ein Bit mehr zur Verfügung stehen, dann würde sich der Wertebereich verdoppeln. Bei GUIDs stehen nun aber insgesamt 16 mal 8, also insgesamt 128 Bit zur Verfügung. Im Vergleich zum AutoWert-Datentyp muss der Wert also 96 (=128 – 32) mal verdoppelt werden, was einen enorm großen Wertebereich ergibt.

Damit entsprechend große Zahlen überhaupt noch handhabbar sind, werden GUIDs nicht als Zahlen, sondern aus einer Kombination aus Zahlen und Texten dargestellt, die zusätzlich noch durch Striche abgegrenzt sind. Dies macht eine GUID für Menschen leichter lesbar. Für Fachleute: Die Darstellung erfolgt im Hexadezimalsystem.

Eine typische GUID hat beispielsweise das folgende Aussehen:

Bild 1: Die Feldgröße Replikations-ID bereitet ein Feld für die Aufnahme von GUIDs vor.

Bild 2: Das Windows-Betriebsystem macht ebenfalls intensiv von GUIDs Gebrauch, wie ein Blick auf den Registry-Editor von Windows verrät.

{A6BA6E08-59CD-4724-9E71-0680DBE6FD11}

Jeweils ein Wertepaar stellt ein Byte dar, sodass die GUID aus insgesamt 32 Buchstaben bzw. Zahlen besteht. Die Gruppierung der Bytes mit Hilfe der Bindestriche erfolgt nach dem folgenden Schema:

4-2-2-2-6

Dabei steht die Zahl 4 beispielsweise für vier Bytes, also insgesamt acht Werte.

Zusätzlich sind GUIDs in der Regel von geschweiften Klammern eingerahmt, was die Identifikation vereinfacht.

Zum Erzeugen einer Access GUID gibt es prinzipiell zwei Möglichkeiten. Die erste Möglichkeit besteht darin, dass Sie innerhalb einer Access-Tabelle als Datentyp AutoWert auswählen. Anschließend ändern Sie die Feldgröße-Eigenschaft von Long Integer in Replikations-ID ab (siehe Bild 1). Dies führt dazu, dass Access nun bei der Anlage eines neuen Datensatzes automatisch eine neue GUID generiert und diese in das Feld einträgt.

Die zweite Möglichkeit besteht darin, eine GUID mit Hilfe einer Betriebssystem-Funktion erzeugen zu lassen und nachträglich in die Tabelle einzutragen. Wie Sie später noch sehen werden, besteht der Vorteil dieser Lösung darin, dass Sie den Primärschlüsselwert eines neuen Datensatzes bereits kennen, bevor Sie den Datensatz angelegt haben.

Die entsprechenden Funktionen zum Erzeugen einer GUID sind fest im Windows-Betriebs-system verankert. Dies ist unter anderem deshalb der Fall, da GUIDs nicht nur im Datenbankbereich eingesetzt, sondern beispielsweise auch von Windows zur Verwaltung von Komponenten benötigt werden (siehe Bild 2). Auch hier ist es wichtig, dass eine Komponente unter einer eindeutigen ID an-gesprochen werden kann.

Zur Erzeugung einer GUID mit Hilfe der Betriebssystem-Funktionen kommen API-Funktionsaufrufe zum Einsatz, die wie in Quellcode 1 deklariert werden.

Private Declare Function CoCreateGuid Lib "ole32.dll" (tGUIDStructure As GUID) As Long
Private Declare Function StringFromGUID2 Lib "ole32.dll" (rGUID As Any, _    ByVal lpstrClsId As Long, ByVal cbMax As Long) As Long
Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As String * 1
End Type
Quellcode 1
Function CreateGUID() As String
    Const clLen As Long = 50
    Dim sGUID As String
    Dim tGUID As GUID
    Dim bGuid() As Byte
    Dim lRtn As Long
    If CoCreateGuid(tGUID) = 0 Then
        bGuid = String(clLen, 0)
        lRtn = StringFromGUID2(tGUID, VarPtr(bGuid(0)), clLen)
        If lRtn > 0 Then
            sGUID = Mid$(bGuid, 1, lRtn - 1)
        End If
        CreateGUID = sGUID
    End If
End Function
Quellcode 2

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Weitere interessante Artikel zu diesem Thema

GUIDs per VBA erstellen (64-bit-kompatibel)

Autowertfelder: Long durch GUID ersetzen

Schreibe einen Kommentar