Recentemente ho dovuto risolvere un problema di un utente che aveva creato campi calcolati in Access. Un campo calcolato, come dice la parola, è un campo il cui risultato deriva da operazioni eseguite su altri campi. Se ragioniamo come utenti Excel, abbiamo molti “campi calcolati”, ossia celle il cui risultato deriva da operazioni eseguite su altre celle. Ecco… il fatto è che sto parlando di Access e, tanto per chiarire subito, consiglio personalmente di non usare campi calcolati in una tabella Access. Forse qualcuno di voi ignora persino la loro esistenza (meglio!). E’ una delle novità di Access 2010, nelle versioni precedenti non esistevano. Se creo un campo in una tabella, esiste uno speciale tipo dati che si chiama Calcolato. Quando lo scelgo, si apre automaticamente la finestra Generatore Espressioni in cui posso scrivere l’espressione da calcolare. Nell’esempio, calcolo il TotaleRiga come [Prezzo]*[Quantita].
E’ tutto molto semplice. Tuttavia, è bene tenere presente:
- un campo calcolato può effettuare calcoli solo su campi della stessa tabella. Non posso effettuare calcoli su campi presenti in altre tabelle o query
- il risultato di un campo calcolato è in sola lettura
- una volta creato, non è più possibile modificare il tipo di dati, anche se non avete ancora memorizzato record nella tabella.
- con un campo calcolato memorizzo un valore ridondante. infatti, il campo calcolato è appunto il risultato di un’operazione effettuata su altri campi.
Nella progettazione di un database devo pensare di memorizzare solo i dati necessari. E memorizzare un campo calcolato in tabella non è necessario (in pratica sto denormalizzando la tabella).
Ma allora come faccio a ottenere il totale riga se dovessi stampare i dati del dettaglio di un ordine? La soluzione è di usare una query in cui creo una colonna calcolata, esattamente con la stessa formula [Prezzo]*[Quantita] e poi utilizzando un report posso visualizzare il totale riga. E poi sempre nel report, nel piè pagina dell’ordine, potrei calcolare il totale della merce ordinata (vedi il video su youtube La stampa di una fattura in Access). Se mi serve visualizzarlo su una maschera, per esempio nella maschera di input delle righe di dettaglio potrei usare un controllo casella di testo e impostare l’origine controllo all’espressione calcolata [Prezzo]*[Quantita] (in cui Prezzo e Quantita sono i nomi delle relative caselle di testo).
Se devo visualizzare il risultato di espressioni che lavorano su altre tabelle (ciò che il campo calcolato non mi consente di fare), posso utilizzare la funzione DSum, oppure DCount, o DLookup e il problema è risolto. Potrei farlo per avere in una maschera il totale del dettaglio degli articoli ordinati, caricati in una sottomaschera.
Insomma, prima di creare in tabella un campo con tipo dati calcolato pensateci due volte: esistono probabilmente alternative migliori.