web-dev-qa-db-fra.com

Comment vérifier si une table existe dans MS Access pour les macros vba

Dupliquer possible:
Vérifier si la table d'accès existe

Je suis nouveau sur les macros VBA. Avez-vous une idée de la manière de vérifier si une table existe ou non? J'ai cherché les publications précédentes mais je n’ai pas trouvé de solution claire à ce problème.

13
Karthik

La définition d'une référence à la bibliothèque d'objets Microsoft Access 12.0 nous permet de tester l'existence d'une table à l'aide de DCount.

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
Tobiasopdenbrouw

Je sais que la question a déjà reçu une réponse, mais je trouve que les réponses existantes ne sont pas valides:
ils renverront True pour les tables liées avec un back-end non fonctionnel.
L'utilisation de DCount peut être beaucoup plus lente, mais plus fiable. 

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

Ce n'est pas une nouvelle question. Je l'ai ajouté dans des commentaires dans un SO message et j'ai posté mes implémentations alternatives dans un autre message. Les commentaires du premier article élucident réellement les différences de performances entre les différentes implémentations.

Fondamentalement, ce qui fonctionne le plus rapidement dépend de l’objet de base de données que vous utilisez avec. 

1
David-W-Fenton

Access a une sorte de table système Vous pouvez lire un peu à ce sujet ici vous pouvez lancer la requête suivante pour voir si elle existe (1 = il existe, 0 = ça ne;;))

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