Как проверить, существует ли таблица в MS Access для макросов vb

Возможный дубликат:
Проверить, существует ли таблица доступа

Я новичок в vba-макросах. Любая идея, как проверить, существует ли таблица или нет? Я искал предыдущие сообщения, но не получил четкого решения для этого.

Ответ 1

Установка ссылки на библиотеку объектов 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

Ответ 2

Exists = IsObject(CurrentDb.TableDefs(tablename))

Ответ 3

Я знаю, что вопрос уже ответил, но я считаю, что существующие ответы недействительны:
они вернут 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

Ответ 4

Это не новый вопрос. Я добавил его в комментарии в одном сообщении SO и опубликовал мои альтернативные варианты в другом сообщении. Комментарии в первом сообщении действительно разъясняют различия в производительности между различными реализациями.

В основном, который работает быстрее всего зависит от того, какой объект базы данных вы используете с ним.

Ответ 5

Доступ имеет какие-то системные таблицы Вы можете прочитать об этом немного здесь, вы можете запустить следующий запрос, чтобы узнать, существует ли он ( 1 = он существует, 0 = it doesnt;))

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