我是vba宏的新手。知道如何检查表是否存在? 我搜索过以前的帖子,但没有得到明确的解决方案。
答案 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));