在我的Access 2010 VBA代码中,我可能会也可能不会根据DoCmd.OpenQuery的结果创建表。我可以检查记录计数导致我可以设置的“ON ERROR”分支,但我正在寻找一种更简洁的方法。有什么建议吗?
答案 0 :(得分:3)
我不确定你在问什么。
您可以使用DCount()来确定SELECT查询返回的行数。
Debug.Print DCount("*","YourQueryName")
如果问题是确定表是否存在,则可以检查TableDefs集合中的表名。如果表名存在,则该语句将返回该表的名称,如果该表名不存在,则抛出可捕获的错误。
Debug.Print CurrentDb.TableDefs("YourTableName").Name
如果你想避免陷阱错误,你可以使用For ... Next循环遍历TableDefs集合,如果你找到名字就会中断For循环。
或者,您可以使用SELECT查询在MSysObjects系统表中查找表名。
SELECT MSysObjects.[Name], MSysObjects.[Type]
FROM MSysObjects
WHERE
(((MSysObjects.[Name])="YourTableName")
AND ((MSysObjects.[Type])=1));
该查询将检查表名作为当前数据库中的本机Access表。如果您可能具有来自该名称的另一个Access数据库(Type = 4)或ODBC数据源(Type = 6)的链接表,请更改WHERE子句。
SELECT MSysObjects.[Name], MSysObjects.[Type]
FROM MSysObjects
WHERE
(((MSysObjects.[Name])="YourTableName")
AND ((MSysObjects.[Type]) In (1, 4, 6)));
如果查询MSysObjects,请确保不更改任何值。另外我听说一些Access 2007用户遇到MSysObjects的读权限错误。您可以通过使用DCount()而不是查询来避免第一个问题。
Debug.Print DCount("*","MSysObjects","[Name]='YourTableName' AND [Type] In (1, 4, 6)")