Best Practices – Non usare sempre la casella combinata

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 mascheraNo caselle combinate

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.