VBA Tipp: Feststellen, ob Tabelle existiert

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

Ich möchte feststellen, ob eine Tabelle in einer Datenbank existiert.

Lösung 1

Das geht mit dieser Funktion mit Hilfe von DAO.

Argumente der Funktion:

  • TableName: Name der Tabelle
  • DbPath (Optional): Pfad und Name der Datenbank, in der die Tabelle liegt. Wird das Argument nicht angegeben, wird die Tabelle in der aktuellen Datenbank gesucht.
Public Function TableExists(TableName As String, _
                            Optional ByVal DbPath As String) As Boolean
 
   'Quelle: http://www.dbwiki.net/
 
   Dim sql As String
 
   On Error Resume Next
 
   If Len(DbPath) = 0 Or DbPath = CurrentDb.Name Then
      DbPath = vbNullString
   Else
      DbPath = " IN '" & DbPath & "'"
   End If
 
   sql = "SELECT Count(*) FROM MSysObjects" & DbPath & _
         " WHERE Name='" & TableName & "' AND Type=1"
 
   TableExists = CurrentDb.OpenRecordset(sql).Fields(0) > 0
 
End Function

Aufruf

   ' Beispiel 1: Tabelle in der aktuellen Datenbank suchen
   If TableExists("EinTabellenname") Then
      MsgBox "Die Tabelle existiert."
   Else
      MsgBox "Die Tabelle existiert nicht."
   End If
 
   ' Beispiel 2: Tabelle in einer anderen Datenbank suchen
   Dim strPfad As String
 
   strPfad = CurrentProject.Path & "\EineAndereDatenbank.mdb"
 
   If TableExists("EinTabellenname", strPfad) Then
      MsgBox "Die Tabelle existiert."
   Else
      MsgBox "Die Tabelle existiert nicht."
   End If

Lösung 2

Mit dieser DAO- bzw. ADO-Funktion wird die Tabelle nur in der aktuellen Datenbank gesucht.

Public Function TableExistsDAO(TableName As String) As Boolean
 
   'Quelle: http://www.dbwiki.net/
 
   Dim tmp As String
 
   On Error Resume Next
   tmp = CurrentDb.TableDefs(TableName).Name
   TableExistsDAO = CBool(Err.Number = 0)
 
End Function
Public Function TableExistsADO(TableName As String) As Boolean
 
   ' Quelle: http://www.dbwiki.net/
 
   On Error Resume Next
   TableExistsADO = IsObject(CurrentData.AllTables(TableName))
 
End Function

Lösung 3

Eine weitere Möglichkeit besteht in der Verwendung der ADO-Methode OpenSchema.

Argumente der Funktion:

  • TableName: Name der Tabelle
  • cnn (Optional): Durch Übergabe einer entsprechenden ADODB.Connection an diesen Parameter kann diese Funktion auch für andere DBMS verwendet werden.
Public Function TableDefExists(TableName As String, _
                               Optional cnn As ADODB.Connection = Nothing) As Boolean
 
   ' Quelle: http://www.dbwiki.net/
 
   Const adSchemaTables As long = 20
 
   Dim rst              As Object  'ADODB.Recordset
 
   If cnn Is Nothing Then
      Set cnn = CodeProject.Connection
   End If
 
   Set rst = cnn.OpenSchema(adSchemaTables, Array(Empty, Empty, TabName))
   TableDefExists = Not rst.EOF
   rst.Close
 
End Function



Wiki faq.png FAQ: Dieser Artikel gehört zu den "Häufig gestellten Fragen" (FAQ). Die Seite Access-FAQ bietet eine Übersicht aller FAQ-Artikel.