Возможный дубликат:
Проверить, существует ли таблица доступа
Я новичок в vba-макросах. Любая идея, как проверить, существует ли таблица или нет? Я искал предыдущие сообщения, но не получил четкого решения для этого.
Возможный дубликат:
Проверить, существует ли таблица доступа
Я новичок в vba-макросах. Любая идея, как проверить, существует ли таблица или нет? Я искал предыдущие сообщения, но не получил четкого решения для этого.
Установка ссылки на библиотеку объектов 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
Exists = IsObject(CurrentDb.TableDefs(tablename))
Я знаю, что вопрос уже ответил, но я считаю, что существующие ответы недействительны:
они вернут True для связанных таблиц с нерабочим back-end.
Использование 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
Это не новый вопрос. Я добавил его в комментарии в одном сообщении SO и опубликовал мои альтернативные варианты в другом сообщении. Комментарии в первом сообщении действительно разъясняют различия в производительности между различными реализациями.
В основном, который работает быстрее всего зависит от того, какой объект базы данных вы используете с ним.
Доступ имеет какие-то системные таблицы Вы можете прочитать об этом немного здесь, вы можете запустить следующий запрос, чтобы узнать, существует ли он ( 1 = он существует, 0 = it doesnt;))
SELECT Count([MSysObjects].[Name]) AS [Count]
FROM MSysObjects
WHERE (((MSysObjects.Name)="TblObject") AND ((MSysObjects.Type)=1));