wake-up-neo.com

So prüfen Sie, ob in MS Access eine Tabelle für vba-Makros vorhanden ist

Mögliches Duplizieren:
Überprüfen Sie, ob eine Zugriffstabelle vorhanden ist

Ich bin neu in VBA-Makros. Irgendeine Idee, wie man prüft, ob eine Tabelle existiert oder nicht? Ich habe nach vorherigen Beiträgen gesucht, aber keine klare Lösung dafür gefunden.

13
Karthik

Durch das Festlegen eines Verweises auf die Microsoft Access 12.0-Objektbibliothek können Sie mithilfe von DCount prüfen, ob eine Tabelle vorhanden ist.

Public Function ifTableExists(tblName As String) As Boolean

    If DCount("[Name]", "MSysObjects", "[Name] = '" & tblName & "'") = 1 Then

        ifTableExists = True

    End If

End Function
29
Karthik
Exists = IsObject(CurrentDb.TableDefs(tablename))
11

Ich weiß, dass die Frage bereits beantwortet wurde, aber ich finde, dass die vorhandenen Antworten nicht gültig sind:
Sie geben True für verknüpfte Tabellen mit einem nicht funktionierenden Backend zurück.
Die Verwendung von DCount kann viel langsamer sein, ist jedoch zuverlässiger. 

Function IsTable(sTblName As String) As Boolean
    'does table exists and work ?
    'note: finding the name in the TableDefs collection is not enough,
    '      since the backend might be invalid or missing

    On Error GoTo hell
    Dim x
    x = DCount("*", sTblName)
    IsTable = True
    Exit Function
hell:
    Debug.Print Now, sTblName, Err.Number, Err.Description
    IsTable = False

End Function
9
Patrick Honorez

Dies ist keine neue Frage. Ich habe es in comments in einem SO post angesprochen und meine alternativen Implementierungen in einem anderen Post gepostet. Die Kommentare im ersten Beitrag erläutern die Leistungsunterschiede zwischen den verschiedenen Implementierungen.

Was am schnellsten funktioniert, hängt davon ab, welches Datenbankobjekt Sie verwenden. 

1
David-W-Fenton

Access hat eine Art Systemtabelle Sie können etwas darüber lesen Sie können die folgende Abfrage auslösen, um zu sehen, ob sie existiert (1 = existiert, 0 = nicht;

SELECT Count([MSysObjects].[Name]) AS [Count]
FROM MSysObjects
WHERE (((MSysObjects.Name)="TblObject") AND ((MSysObjects.Type)=1));
0
Sjuul Janssen