Как определить, создана ли таблица? - PullRequest
1 голос
/ 16 сентября 2011

В своем коде Access 2010 VBA я могу или не могу создать таблицу в зависимости от результатов DoCmd.OpenQuery.Я могу проверить количество записей, которое вызывает ветку «ON ERROR», которую я могу установить, но я искал более аккуратный способ.Есть предложения?

1 Ответ

3 голосов
/ 16 сентября 2011

Я не уверен, что вы спрашиваете.

Вы можете использовать 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 (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)")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...