[Eine Seite zurück] [Übersicht] [Eine Seite vor]

Benutzung auf eigene Gefahr !
Keine Garantie für garnichts !

Indexnamen einer Spalte herausfinden

Sprache / Programm: Access ab Version 97
Beschreibung

Die Funktion gibt an, ob auf einer Spalte in einer Tabelle ein Index liegt. Falls ja, gibt die Funktion den Index-Namen zurück.

VBA-Quelltext
Public Function SpalteHatIndex(TabName As String, SpaltenName As String) As String
    Dim IndexNr As Integer, SpalteNr As Integer, TabellenIndex As Object
    ' Enthält die Tabelle überhaupt Index-Felder ?
    SpalteHatIndex = vbNullString
    Set TabellenIndex = DBEngine(0)(0).TableDefs(TabName).Indexes
    If TabellenIndex.Count = 0 Then Exit Function
   
    ' Alle Indizes durchlaufen und überprüfen
    For IndexNr = 0 To TabellenIndex.Count - 1
        ' Bei einem Mehrfeldindex sind mehrere Spaltennamen zu überprüfen
        For SpalteNr = 0 To TabellenIndex(IndexNr).Fields.Count - 1
            If TabellenIndex(IndexNr).Fields(SpalteNr).Name = SpaltenName Then
                SpalteHatIndex = TabellenIndex(IndexNr).Name
                Exit Function
            End If
        Next SpalteNr
    Next IndexNr
End Function


' ****** Alternative Version - bei Problemen verwenden ****** '
Function SpalteHatIndex(TabName As String, SpaltenName As String) As String
    Dim IndexNr As Integer, SpalteNr As Integer
    ' Enthält die Tabelle überhaupt Index-Felder ?
    SpalteHatIndex = vbNullString
    If CurrentDb.TableDefs(TabName).Indexes.Count <= 0 Then Exit Function
   
    ' Alle Namen aller Spalten In allen Indizes überprüfen
    For IndexNr = 0 To CurrentDb.TableDefs(TabName).Indexes.Count - 1
        For SpalteNr = 0 To CurrentDb.TableDefs(TabName).Indexes(IndexNr).Fields.Count - 1
            If CurrentDb.TableDefs(TabName).Indexes(IndexNr).Fields(SpalteNr).Name = SpaltenName Then
                SpalteHatIndex = CurrentDb.TableDefs(TabName).Indexes(IndexNr).Name
                Exit Function
            End If
        Next SpalteNr
    Next IndexNr
  End Function
Argumente der Funktion/Prozedur

TabName

Name der zu überprüfenden Tabelle

SpaltenName

Name der zu überprüfenden Spalte
Verwendete Variable

IndexNr
Zähler
SpaltenNr
Zähler
TabellenIndex
Objektvariable, die den Index der Spalte enthält.
Rückgabewert

Name des Indexes

Falls die Spalte keinen Index hat, wird eine leere Zeichenfolge zurückgegeben
Anwendungsgebiete, Fehler und Warnungen

Wenn ein Feld mit mehreren Indizes belegt ist (theoretisch möglich, aber selten sinnvoll), gibt die Funktion nur einen Indexnamen zurück. Die Existenz der Tabelle und der Spalte wird nicht überprüft. Access hat seit Version 95 ein latentes Problem mit dem Field-Objekt. Dieses kann weder in einer Objektvariablen zugewiesen noch mit With weiterverwendet werden, sondern muss im Code jedes Mal mit voller Referenz angegeben werden, was den Programmierer ein wenig unfähig aussehen lässt. Verwendet die DAO Objektbibliothek. Ab Access 2000 muss diese explizit im VBA-Editor über 'Extras' -> 'Verweise' als 'Microsoft DAO 3.6' (oder höher) eingebunden werden und vor die 'Microsoft ADO 2.1' (oder höher) Bibliothek gesetzt werden.