Makrothek
MS Access betrifft MS Access

Problembeschreibung:

Manchmal muss innerhalb eines Prozessablaufs bekannt sein, ob eine Tabelle bereits existiert oder ob diese z. B. erst angelegt werden muss.

Lösungsidee

Hier bietet sich eine Funktion an, die prüft, ob die Tabelle existiert und die entsprechend der Existenz den Rückgabewert setzt.

Es gibt mehrere Alternativen. Während die erste Alternative die Systemtabelle "MSysObjects" abfragt, in der alle Access-Objekte wie Tabellen, Abfragen, Formulare, etc. aufgelistet sind, benutzt die zweite Alternative das TableDef-Objekt von Access.

Programmcode für Alternative 1


'Funktion zum Testen der Existenz einer Tabelle

Function Existiert_Tabelle(ByVal Tabelle As String) As Boolean
  ' Überpfüft, ob eine Tabelle existiert und gibt TRUE=existiert oder FALSE=existiert nicht zurück
  ' Es wird die Systemtabelle "MSysObjects"
  ' Es muss der Verweis auf DAO 3.6 gesetzt sein

  Dim db As Database
  Dim rs As DAO.Recordset

  Existiert_Tabelle = False

  'Datenbankobjekt ermitteln
  Set db = CurrentDb
  Set rs = db.OpenRecordset("SELECT Name FROM MSysObjects WHERE Flags=0 AND Type=1 AND Name='" & Tabelle & "'")
  'Wenn die Abfrage ein Ergebnis liefert, existiert die Tabelle
  If rs.RecordCount > 0 Then Existiert_Tabelle = True
  rs.Close

  'Speicher freigeben
  Set db = Nothing
End Function

Programmcode für Alternative 2


'Funktion zum Testen der Existenz einer Tabelle

Function Existiert_Tabelle(ByVal Tabellename As String) As Boolean
  ' Überpfüft, ob eine Tabelle existiert und gibt TRUE=existiert oder FALSE=existiert nicht zurück
  ' Es wird das TableDef-Objekt verwendet

  Dim db As Database
  Dim Tabelle As TableDef

  Existiert_Tabelle = False

  'Datenbankobjekt ermitteln
  Set db = CurrentDb

  For Each Tabelle in db.TableDefs
    'Jedes TableDef-Objekt prüfen, ob der Name gleich dem gesuchten Tabellennamen entspricht
    If StrComp(Tabelle.Name, Tabellenname) = 0 Then
      Existiert_Tabelle = True
      Exit For
    End If
  Next Tabelle

  'Speicher freigeben
  Set db = Nothing
End Function