如何检查MS Access for vba宏中是否存在表

时间:2010-07-28 07:12:45

标签: ms-access vba access-vba

  

可能重复:
  Check if access table exists

我是vba宏的新手。知道如何检查表是否存在? 我搜索过以前的帖子,但没有得到明确的解决方案。

5 个答案:

答案 0 :(得分:30)

设置对Microsoft Access 12.0对象库的引用允许我们使用DCount测试表是否存在。

Public Function ifTableExists(tblName As String) As Boolean

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

        ifTableExists = True

    End If

End Function

答案 1 :(得分:11)

Exists = IsObject(CurrentDb.TableDefs(tablename))

答案 2 :(得分:9)

我知道这个问题已经回答,但我发现现有答案无效:
对于具有非工作后端的链接表,它们将返回True 使用DCount可能会慢很多,但更可靠。

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

答案 3 :(得分:1)

这不是一个新问题。我在comments in one SO post中添加了它,并在另一篇文章中发布了my alternative implementations。第一篇文章中的评论实际上阐明了不同实现之间的性能差异。

基本上,哪个工作最快取决于你使用它的数据库对象。

答案 4 :(得分:0)

Access有一些系统表You can read about it a little here你可以触发以下查询以查看它是否存在(1 =它存在,0 =它不存在;)

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