MS Access: определить тип объекта - PullRequest
8 голосов
/ 19 января 2010

Есть ли способ определить тип объекта при передаче ссылки на функцию?

Я использую функцию разрешений безопасности, которая определяет, имеет ли пользователь разрешение на просмотр / редактирование формы, переданной ему по ссылке. Я хотел бы расширить это, чтобы включить также отчеты.

Чтобы функция была обобщенной, я хотел бы передать ссылку либо для формы, либо для отчета как объекта, например: function gfSecurity_Permission(obj as Object)

Однако мне нужно определить type объекта в функции.

Кто-нибудь знает способ сделать это?

MTIA

Ответы [ 2 ]

11 голосов
/ 19 января 2010

Взгляните на

typeOf и typeName

Общие переменные объекта (то есть переменные, которые вы объявляете как Объект) может содержать объекты из любого класса. При использовании переменных типа Object, вам может потребоваться предпринять различные действия в зависимости от класса объект; например, некоторые объекты могут не поддерживать определенный свойство или метод. Visual Basic предоставляет два способа определения какой тип объекта хранится в переменной объекта: TypeName функция и оператор TypeOf ... Is.

TypeName и TypeOf… Is
Функция TypeName возвращает строку и является лучшим выбором, когда вы необходимо сохранить или отобразить имя класса объекта, как показано в следующий фрагмент кода:

Dim Ctrl As Control = New TextBox  
MsgBox(TypeName(Ctrl))

Оператор TypeOf ... Is - лучший выбор для проверки объекта тип, потому что это намного быстрее, чем эквивалентное сравнение строк используя TypeName. Следующий фрагмент кода использует TypeOf ... находится в пределах Если ... Тогда ... Остальное утверждение:

If TypeOf Ctrl Is Button Then  
    MsgBox("The control is a button.") 
End If
6 голосов
/ 08 апреля 2011

Самый простой способ определить тип доступа в доступе - это выполнить поиск объекта в системных таблицах Access.

Здесь будет поиск:

DLookup("Type","MSysObjects","NAME = '" & strObject & "'")

strObject - это имя объекта в Access

Результатом является одно из чисел, приведенных ниже, ИЛИ НЕДЕЙСТВИТЕЛЬНО, если объект не существует в Access

1 = Access Table
4 = OBDB-Linked Table / View
5 = Access Query
6 = Attached (Linked) File  (such as Excel, another Access Table or query, text file, etc.)
-32768 = Access Form
-32764 = Access Report
-32761 = Access Module

Итак, dlookup предоставит «-32768» для формы или «-32764» для отчета. Надеюсь, что это поможет

...