2010-01-19 76 views
8

Có cách nào để xác định loại đối tượng, khi chuyển tham chiếu đến hàm không?MS Access: Xác định loại đối tượng

Tôi đang sử dụng chức năng cấp quyền bảo mật, xác định xem người dùng có quyền xem/chỉnh sửa Biểu mẫu được chuyển đến nó bằng tham chiếu hay không. Tôi cũng muốn mở rộng báo cáo này để bao gồm các báo cáo.

Để giữ cho hàm tổng quát, tôi muốn vượt qua một ref cho cả một Form hoặc một báo cáo như một đối tượng, ví dụ: function gfSecurity_Permission(obj as Object)

Tuy nhiên, tôi sẽ cần phải xác định type của đối tượng trong hàm.

Có ai biết cách để làm điều đó không?

MTIA

Trả lời

11

Hãy xem

typeOf and typeName

biến đối tượng Generic (có nghĩa là, các biến bạn khai báo như Object) có thể giữ các đối tượng từ bất kỳ lớp. Khi sử dụng các biến kiểu Object, bạn có thể cần thực hiện các hành động khác nhau dựa trên lớp đối tượng ; ví dụ: một số đối tượng có thể không hỗ trợ thuộc tính hoặc phương thức cụ thể. Visual Basic cung cấp hai phương tiện xác định loại đối tượng nào được lưu trữ trong một biến đối tượng: hàm TypeName và toán tử TypeOf ... Is.

TypeName và typeof ... Là
Chức năng TypeName trả về một chuỗi và là sự lựa chọn tốt nhất khi bạn cần để lưu trữ hoặc hiển thị tên lớp của một đối tượng, như thể hiện trong đoạn mã sau:

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

các typeof ... là nhà điều hành là sự lựa chọn tốt nhất để thử nghiệm của một đối tượng loại, bởi vì nó là nhanh hơn nhiều so với một chuỗi so sánh tương đương sử dụng TypeName. Đoạn mã sau đây sử dụng typeof ... Là một trong Nếu ... Thì ... Else tuyên bố:

If TypeOf Ctrl Is Button Then 
    MsgBox("The control is a button.") 
End If 
+0

Cảm ơn rất nhiều! – maxhugen

+2

Không thể tìm thấy bất kỳ tham chiếu nào đến từ khóa TypeOf trong Access VBA. Nghi ngờ đây là .NET. [Ở đây] (http://office.microsoft.com/en-us/access-help/typename-function-HA001228928.aspx?CTT=5&origin=HA010131676) là tham chiếu MSDN đến hàm TypeName trong Access VBA. Nhân tiện, điều này có thể hữu ích: [danh sách tất cả các chức năng Access VBA theo thể loại] (http://office.microsoft.com/en-us/access-help/access-functions-by-category-HA010131676.aspx). –

+1

@simon, nó là một toán tử và có mặt trong - tôi đoán - tất cả các phiên bản của VBA .. http://msdn.microsoft.com/en-us/library/0ec5kw18%28v=VS.80%29.aspx –

6

Cách đơn giản nhất để xác định loại truy cập trong việc tiếp cận là để làm một tra cứu đối tượng trong Truy cập các bảng hệ thống.

Dưới đây sẽ là tra cứu:

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

strObject là tên của đối tượng trong Access

Kết quả là một trong những số dưới đây HOẶC NULL nếu đối tượng không tồn tại trong 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 

vì vậy, dlookup sẽ cung cấp "-32768" cho Biểu mẫu hoặc "-32764" cho Báo cáo Hy vọng rằng sẽ giúp

+0

Phương pháp này chỉ hoạt động với các đối tượng Access, nó sẽ không trả về các loại điều khiển. TypeName trả về các kiểu đối tượng Access và các kiểu điều khiển. – DataWriter

Các vấn đề liên quan