La casella combinata è uno dei controlli più utilizzati nelle maschere di Microsoft Access. Ciò non significa che la casella combinata sia sempre l’unica scelta, e soprattutto che sia la scelta ottimale in ogni circostanza!
Quando apro una maschera, Microsoft Access legge l’origine record e l’origine riga di ogni casella combinata presente sulla maschera. Ciò potrebbe appesantire e rallentare i tempi di apertura, soprattutto quando il mio database è usato da più utenti, o quando i dati del back-end sono memorizzati in rete.
Se l’origine riga di una casella combinata è una tabella (o query) con molte righe (diciamo nell’ordine delle migliaia, o decine di migliaia: così potrebbe essere quando si tratta di articoli) è opportuno non usare sempre la casella combinata, ma scegliere una soluzione più performante.
Nell’esempio che vediamo nel video, al posto della casella combinata con l’elenco dei prodotti, si tratta di usare semplici caselle di testo, velocizzando il caricamento dati di un ordine. Abbiamo due possibilità:
1) inserire il prodotto digitando il ProductNumber e visualizzare automaticamente il corrispondente ProductName. Questa modalità va molto bene per chi conosce i prodotti in base al codice e non ha nessuna voglia di aprire una casella combinata e andare a cercarsi il nome del prodotto. La casella combinata per lui/lei diventa una perdita di tempo!
Il codice che compila la casella di testo con il ProductName è:
If Len(Me.txtProductNumber) > 0 Then Me.txtProductName = DLookup("ProductName", "Products", "ProductNumber=" & Me.txtProductNumber) End If
Se l’utente ha digitato un ProductNumber e quindi la lunghezza (Len) della relativa casella di testo è > 0, allora nella casella del ProductName inserisci il risultato della funzione DLookup. Tale funzione utilizza 3 argomenti: nel primo il nome del campo di cui voglio il valore, nel secondo il nome della tabella in cui cercare, nel terzo il filtro.
Oppure
2) inserire il prodotto senza necessità di ricordare il ProductNumber, sfruttando la possibilità di filtrare i prodotti attraverso una maschera
In questo secondo caso un pulsante apre la maschera Products
DoCmd.OpenForm "Products"
Qui con opportune caselle combinate, magari anche a cascata, l’utente filtra i prodotti e arrivare a visualizzare quello voluto. A quel punto è sufficiente cliccare sulla casella di testo con il ProductNumber e i relativi ProductNumber e ProductName sono inseriti nella maschera Orders.
Forms("Orders")!txtProductNumber = Me.txtProductNumber Forms("Orders")!txtProductName = Me.txtProductName Forms("Orders")!txtQuantity.SetFocus DoCmd.Close
Forms è la collezione delle maschere. Perciò Forms(“Orders”) fa riferimento alla maschera Orders, il punto esclamativo separa il nome della maschera dal controllo a cui fare riferimento, nel primo caso txtProductNumber. Sto indicando ad Access che il controllo txtProductNumber della maschera Orders deve essere uguale a Me.txtProductNumber. Me fa riferimento alla maschera corrente, cioè la maschera con l’elenco dei prodotti.