Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 5/2015.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Primärschlüsselfelder ermitteln

Für die eine oder andere Anforderung benötigen Sie das Primärschlüsselfeld beziehungsweise die Primärschlüsselfelder einer Tabelle. Dieser Beitrag liefert zwei Funktionen, mit denen dies möglich ist.

Einzelnes Primärschlüsselfeld ermitteln

Gelegentlich wollen Sie das Primärschlüsselfeld einer Tabelle ermitteln. Dies erledigen Sie mit den Methoden der DAO-Bibliothek. Die folgende Funktion namens GetSinglePrimaryKey ermittelt einen einzelnen Primärschlüssel.

Sie funktioniert nicht für Tabellen mit zusammengesetzten Primärschlüsseln. Die Funktion erwartet den Namen der zu untersuchenden Tabelle als Parameter und liefert den Namen des Primärschlüsselfeldes zurück.

Sie erstellt ein TableDef-Objekt auf Basis der übergebenen Tabelle und durchläuft alle Elemente der Indexes-Auflistung dieser Tabelle. Dabei prüft sie, ob die Eigenschaft Primary den Wert True hat. In diesem Fall handelt es sich um einen Primärschlüssel-Index. Wenn dieser Index nur ein Feld der Tabelle enthält, trägt die Funktion den Namen dieses Feldes als Rückgabewert in die Variable GetPrimaryKey ein (s. Listing 1).

Public Function GetSinglePrimaryKey(strTable As String) As String
     Dim db As DAO.Database
     Dim tdf As DAO.TableDef
     Dim idx As DAO.Index
     Set db = CurrentDb
     Set tdf = db.TableDefs(strTable)
     For Each idx In tdf.Indexes
         If idx.Primary Then
             If idx.Fields.Count = 1 Then
                 GetPrimaryKey = idx.Fields(0).Name
             End If
             Exit For
         End If
     Next idx
End Function

Listing 1: Ermitteln des Primärschlüssels einer Tabelle

Alle Primärschlüssel ermitteln

Manche Tabellen verwenden zusammengesetzte Primärschlüssel. Dies ist nicht besonders praktisch, da Sie beispielsweise bei einer Verknüpfung mit einer solchen Tabelle immer direkt zwei Fremdschlüsselfelder bereitstellen müssen (s. Bild 1).

Beispiel für einen zusammengesetzten Primärschlüssel

Bild 1: Beispiel für einen zusammengesetzten Primärschlüssel

Sinnvoller wäre es, ein zusätzliches Feld als Primärschlüsselfeld bereitzustellen und die bis eigentlich als zusammengesetzten Primärschlüssel vorgesehenen Felder als zusammengesetzten, eindeutigen Index zu definieren – aber eben ohne Primärschlüsseleigenschaft (im Beitrag Primärschlüssel in Verknüpfungstabelle nachrüsten, www.access-im-unternehmen.de/1006, erfahren Sie, wie Sie einer solchen Tabelle einen Primärschlüssel bestehend aus einem einzigen Feld nachträglich hinzufügen).

Dennoch kann es sein, dass Sie einen aus zwei oder mehreren Feldern zusammengesetzten Primärschlüssel ermitteln müssen. Dies erledigt die Funktion GetPrimaryKeys, die ebenfalls den Namen der zu untersuchenden Tabelle als Parameter erwartet.

Sie durchläuft ebenfalls alle Elemente der Indexes-Auflistung und prüft die Primary-Eigenschaft des aktuellen Elements. Dann durchläuft sie alle Field-Elemente der Fields-Auflistung und fügt die Feldnamen einer Variablen namens strPKTemp hinzu – mit angehängtem Semikolon. Nachdem alle Elemente durchlaufen wurden, schneidet die Funktion noch das letzte angehängte Semikolon ab und gibt das Ergebnis als Funktionswert zurück (s. Listing 2).

Public Function GetPrimaryKeys(strTable As String) As String
     Dim db As DAO.Database
     Dim tdf As DAO.TableDef
     Dim idx As DAO.Index
     Dim strPKTemp As String
     Dim i As Integer
     Set db = CurrentDb
     Set tdf = db.TableDefs(strTable)
     For Each idx In tdf.Indexes
         If idx.Primary Then
             For i = 0 To idx.Fields.Count - 1
                 strPKTemp = strPKTemp & idx.Fields(0).Name & ";"
             Next i
         End If
     Next idx
     GetPrimaryKeys = Left(strPKTemp, Len(strPKTemp) - 1)
End Function

Listing 2: Ermitteln der Primärschlüssel einer Tabelle

Dieser Wert sieht also etwa für eine Beispieltabelle namens tblBestelldetails wie folgt aus:

  GetPrimaryKeys("tblBestelldetails")
BestellungID;BestellungID

Wenn Sie diese per Semikolon getrennte Liste nach dem Abrufen durchlaufen wollen, um weitere Aktionen damit durchzuführen, können Sie das Ergebnis beispielsweise direkt in ein Array schreiben – und zwar mithilfe der Split-Anweisung (s. Listing 3).

Public Sub Test_GetPrimaryKeys()
     Dim strPrimaryKeys() As String
     Dim i As Integer
     strPrimaryKeys() = Split(GetPrimaryKeys("tblBestelldetails"), ";")
     For i = LBound(strPrimaryKeys) To UBound(strPrimaryKeys)
         Debug.Print strPrimaryKeys(i)
     Next i
End Sub

Listing 3: Test der Funktion GetPrimaryKeys

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.