2010-01-19 14 views
8

Esiste un modo per determinare il tipo di oggetto quando si passa un riferimento a una funzione?Accesso MS: Determinazione del tipo di oggetto

Sto utilizzando una funzione di autorizzazione di sicurezza, che determina se l'utente ha il permesso di visualizzare/modificare il modulo passato ad esso per riferimento. Mi piacerebbe espandere questo per includere anche i report.

Per mantenere la funzione generica, mi piacerebbe passare un ref sia per una maschera o un report come un oggetto, ad esempio: function gfSecurity_Permission(obj as Object)

Tuttavia, avrei bisogno di determinare il type dell'oggetto all'interno della funzione.

Qualcuno sa di un modo per farlo?

MTIA

risposta

11

Date un'occhiata a

typeOf and typeName

variabili oggetto generico (cioè, le variabili si dichiara come Object) può contenere gli oggetti da qualsiasi classe. Quando si utilizzano variabili di tipo Oggetto, potrebbe essere necessario intraprendere azioni diverse in base alla classe dell'oggetto ; ad esempio, alcuni oggetti potrebbero non supportare una particolare proprietà o metodo . Visual Basic fornisce due metodi per determinare quale tipo di oggetto è memorizzato in una variabile oggetto: la funzione TypeName e l'operatore TypeOf ... Is.

TypeName e TypeOf ... È
La funzione TypeName restituisce una stringa ed è la scelta migliore quando si necessità di memorizzare o visualizzare il nome della classe di un oggetto, come illustrato nel seguente frammento di codice:

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

il TypeOf ... è operatore è la scelta migliore per testare il tipo di un oggetto , perché è molto più veloce di un confronto di stringa equivalente utilizzando TypeName. Il seguente frammento di codice utilizza TypeOf ... È all'interno di un If ... Then ... Else:

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

Grazie mille! – maxhugen

+2

Impossibile trovare alcun riferimento a una parola chiave TypeOf in Access VBA. Supponiamo che questo sia solo .NET. [Here] (http://office.microsoft.com/en-us/access-help/typename-function-HA001228928.aspx?CTT=5&origin=HA010131676) è il riferimento MSDN alla funzione TypeName in Access VBA. A proposito, questo può essere utile: un [elenco di tutte le funzioni di Access VBA per categoria] (http://office.microsoft.com/en-us/access-help/access-functions-by-category-HA010131676.aspx). –

+1

@simon, è un operatore ed è presente in - credo - tutte le versioni di VBA. Http://msdn.microsoft.com/en-us/library/0ec5kw18%28v=VS.80%29.aspx –

6

modo più semplice per determinare il tipo di accesso in accesso è quello di fare una ricerca oggetto all'interno del Accedi alle tabelle di sistema.

qui sarebbe la ricerca:

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

strObject è il nome dell'oggetto all'interno di Access

Il risultato è uno dei numero sotto o NULL se l'oggetto non esiste in 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 

così, il DLookup avrebbe fornito "-32768" per una maschera o "-32.764" per un report Speranza che aiuta

+0

Questo metodo funziona solo con oggetti Access, non restituirà tipi di controllo. TypeName restituisce tipi di oggetti di accesso e tipi di controllo. – DataWriter

Problemi correlati