2010-01-19 620 views
8

¿Hay alguna forma de determinar el tipo de objeto al pasar una referencia a una función?MS Access: Determine el tipo de objeto

Estoy usando una función de permisos de seguridad, que determina si el usuario tiene permiso para ver/editar el Formulario que se le pasó por referencia. Me gustaría expandir esto para incluir informes también.

Para mantener la función genérica, me gustaría pasar una referencia, ya sea para un formulario o un informe como un objeto, por ejemplo: function gfSecurity_Permission(obj as Object)

Sin embargo, necesitaría para determinar la type del objeto dentro de la función.

¿Alguien sabe de una manera de hacerlo?

MTIA

Respuesta

11

Tome un vistazo a

typeOf and typeName

variables de objeto genérico (es decir, las variables se declara como Object) puede contener objetos de cualquier clase. Al usar variables de tipo Object, , es posible que deba realizar diferentes acciones en función de la clase del objeto ; por ejemplo, algunos objetos pueden no ser compatibles con una propiedad o método en particular . Visual Basic proporciona dos medios para determinar qué tipo de objeto se almacena en una variable de objeto: la función TypeName y el operador TypeOf ... Is.

TypeName y TypeOf ... Es
La función TypeName devuelve una cadena y es la mejor opción cuando se necesidad de almacenar o mostrar el nombre de la clase de un objeto, como se muestra en el fragmento siguiente código:

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

el TypeOf ... es el operador es la mejor opción para el ensayo de un objeto de tipo , porque es mucho más rápido que una comparación de cadena equivalente utilizando TypeName. El fragmento de código siguiente utiliza TypeOf ... está dentro de un Si ... Then ... Else:

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

¡Muchas gracias! – maxhugen

+2

No se pudo encontrar ninguna referencia a una palabra clave TypeOf en Access VBA. Sospeche que esto es solo .NET. [Aquí] (http://office.microsoft.com/en-us/access-help/typename-function-HA001228928.aspx?CTT=5&origin=HA010131676) es la referencia de MSDN a la función TypeName en Access VBA. Por cierto, esto puede ser útil: una [lista de todas las funciones de Access VBA por categoría] (http://office.microsoft.com/en-us/access-help/access-functions-by-category-HA010131676.aspx) –

+1

@simon, es un operador y está presente en - supongo - todas las versiones de VBA .. http://msdn.microsoft.com/en-us/library/0ec5kw18%28v=VS.80%29.aspx –

6

forma más sencilla de determinar el tipo de acceso en el acceso es hacer una búsqueda de objeto dentro de la Acceda a las tablas del sistema.

en este caso sería la búsqueda:

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

strObject es el nombre del objeto dentro de Access

El resultado es uno de los números de abajo o NULL si el objeto no existe en el acceso

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 

así, el dlookup proporcionaría "-32768" para un formulario o "-32764" para un informe Espero que ayude

+0

Este método solo funciona con objetos de Access, no devolverá tipos de control. TypeName devuelve tipos de objetos de acceso y tipos de control. – DataWriter