Durante l'uso di Microsoft Access è spesso necessario usare valori che non si trovano direttamente nei dati. Ad esempio, si potrebbe aver bisogno di calcolare l'IVA oppure il valore complessivo di un ordine. Per calcolare questi valori è possibile usare le espressioni. Per usare le espressioni occorre prima di tutto scriverle usando una sintassi corretta. Con sintassi si intende la serie di regole in base alle quali vengono combinati correttamente le parole e i simboli inclusi in un'espressione. Inizialmente le espressioni in Access possono essere difficili da leggere. Tuttavia, con un po' di pratica e se si fa riferimento alle linee guida relative alla sintassi delle espressioni, risulteranno di più semplice comprensione.
In questo articolo
Panoramica delle espressioni
Un'espressione è una combinazione di alcuni o tutti gli elementi seguenti: funzioni predefinite o definite dall'utente, identificatori, operatori, valori e costanti. Un'espressione restituisce un solo valore.
Ad esempio, l'espressione seguente contiene componenti comuni:
=Sum([Purchase Price])*0.08
-
Sum() è una funzione predefinita
-
[Purchase Price] è un identificatore
-
* è un operatore matematico
-
0.08 è una costante
Questa espressione può essere usata in una casella di testo del piè di pagina di una maschera o di un report per calcolare l'IVA per un gruppo di articoli.
Le espressioni possono essere molto più complesse o più semplici rispetto a questo esempio. Questa espressione booleano, ad esempio, è costituita solo da un operatore e da una costante:
>0
Questa espressione restituisce:
-
True quando viene confrontata con un numero maggiore di 0.
-
False quando viene confrontata con un numero minore di 0.
Può essere usata nella proprietà Valido se di un controllo o di un campo di tabella per verificare che vengano immessi solo valori positivi. Le espressioni vengono usate in vari posti per eseguire calcoli, modificare caratteri o testare i dati. Tabelle, query, maschere, report e macro hanno proprietà che accettano un'espressione. Ad esempio, è possibile usare le espressioni nelle proprietà Origine controllo e Valore predefinito di un controllo, oltre che nella proprietà Regola di convalida di un campo di tabella.
Componenti delle espressioni
Per creare un'espressione, gli identificatori vengono combinati tramite funzioni, operatori, costanti e valori. Qualsiasi espressione valida deve contenere almeno una funzione o almeno un identificatore e può contenere anche costanti o operatori. È possibile usare un'espressione anche come parte di un'altra espressione, in genere come argomento di una funzione. Questa modalità di utilizzo è detta annidamento di un'espressione.
-
Identificatori Il formato generale è:
[Collection name]![Object name].[Property name]
Basta specificare un numero sufficiente di parti di un identificatore per renderlo univoco all'interno del contesto di un'espressione specifica. Non è infrequente che un identificatore abbia il formato [Object name].
-
Funzioni Il formato generale è:
Function(argument, argument)
Uno degli argomenti è in genere un identificatore o un'espressione. Alcune funzioni non richiedono argomenti. Prima di usare una determinata funzione, esaminarne la sintassi. Per altre informazioni, vedere Funzioni (ordinate per categoria).
-
Operatori Il formato generale è:
Identifier operator identifier
Esistono tuttavia delle eccezioni a questo formato, come illustrato nella sezione Operatori.
-
Costanti Il formato generale è:
Identifier comparison_operator constant
-
Valori I valori possono trovarsi in diverse posizioni all'interno di un'espressione.
Oggetti, raccolte e proprietà
Con il termine oggetto si fa riferimento a tutte le tabelle, le query e le maschere e a tutti i report e i campi di un database di Access. Ogni oggetto ha un nome. Alcuni oggetti sono già denominati, ad esempio la tabella Contatti di un database creato tramite il modello Contatti di Microsoft Office Access. Quando si crea un nuovo oggetto, gli si assegna un nome.
Un gruppo composto da tutti i membri di un particolare tipo di oggetto viene definito raccolta. Ad esempio, il gruppo di tutte le tabelle incluse in un database costituisce una raccolta. Alcuni oggetti membri di una raccolta del database possono a loro volta essere raccolte contenenti altri oggetti. Ad esempio, un oggetto tabella è una raccolta contenente oggetti campo.
Gli oggetti sono caratterizzati da proprietà, che descrivono e consentono di modificare le funzionalità dell'oggetto stesso. Ad esempio, un oggetto query ha una proprietà Visualizzazione predefinita che descrive e consente di specificare la modalità di visualizzazione della query durante la sua esecuzione.
Il diagramma seguente illustra la relazione tra raccolte, oggetti e proprietà.
|
3 Proprietà 2 Oggetto 1 Raccolta |
Identificatori
Quando si usa un oggetto, una raccolta o una proprietà in un'espressione, per fare riferimento a tale elemento si usa un identificatore. Un identificatore include il nome dell'elemento che si vuole identificare e il nome dell'elemento a cui appartiene. Ad esempio, l'identificatore di un campo include il nome del campo e il nome della tabella a cui il campo appartiene. Un esempio di un identificatore simile è:
[Customers]![BirthDate]
In alcuni casi, il nome di un elemento funge da solo da identificatore. Questo vale se il nome dell'elemento è univoco all'interno del contesto dell'espressione che si sta creando. Il resto dell'identificatore viene infatti ricavato dal contesto. Se, ad esempio, si sta progettando una query che usa solo una tabella, i nomi dei campi fungeranno da soli da identificatori in quanto tali nomi sono univoci all'interno di una tabella specifica. Poiché si sta usando solo una tabella, il nome della tabella è implicito in ogni identificatore usato nella query per fare riferimento a un campo.
In altri casi è necessario fare riferimento esplicito alle parti di un identificatore per garantire il corretto funzionamento di un riferimento. Questo vale quando un identificatore non è univoco nel contesto dell'espressione. In caso di contesto ambiguo, è necessario definire in modo esplicito un numero sufficiente di parti dell'identificatore per renderlo univoco all'interno del contesto. Supponiamo ad esempio che si stia progettando una query che usa una tabella denominata Prodotti e una tabella denominata Ordini e che entrambe le tabelle includano un campo denominato IDProdotto. In questo caso, l'identificatore usato nella query per fare riferimento a uno dei due campi IDProdotto deve includere il nome della tabella oltre al nome del campo. Ad esempio:
[Products]![ProductID]
Operatori degli identificatori Sono disponibili tre operatori che è possibile usare insieme a un identificatore:
-
Operatore punto esclamativo (!)
-
Operatore punto (.)
-
Operatore parentesi quadre ([ ])
Questi operatori consentono di racchiudere ogni parte dell'identificatore tra parentesi quadre oppure di unire tali parti tramite l'operatore punto esclamativo o punto. Ad esempio, un identificatore di un campo denominato Last Name incluso in una tabella denominata Employees può essere espresso come [Employees]![Last Name]. L'operatore punto esclamativo indica ad Access che la parte che segue è un oggetto appartenente alla raccolta che precede l'operatore. In questo caso, [Last Name] è un oggetto campo appartenente alla raccolta [Employees], che a sua volta è un oggetto tabella.
In realtà non è sempre necessario racchiudere un identificatore o una sua parte tra parentesi quadre. Se l'identificatore non include spazi o altri caratteri speciali, Access aggiunge automaticamente le parentesi quadre quando analizza l'espressione. È tuttavia consigliabile immettere le parentesi quadre manualmente, in quanto aiutano a evitare gli errori e consentono di definire a livello visivo come identificatore una parte specifica di un'espressione.
Funzioni, operatori, costanti e valori
Per creare un'espressione, oltre agli identificatori è necessario definire l'azione da eseguire. A questo scopo è necessario usare funzioni, operatori e costanti.
Funzioni
Una funzione è una procedura che può essere usata in un'espressione. Alcune funzioni, come la funzione Date, non richiedono l'immissione di dati per funzionare. Tuttavia, la maggior parte delle funzioni richiede un input specifico, ossia gli argomenti.
Nell'esempio riportato all'inizio dell'articolo la funzione DatePart usa due argomenti: l'argomento intervallo, con valore "yyyy", e l'argomento data, con valore [Customers]![BirthDate]. La funzione DatePart richiede almeno questi due argomenti (intervallo e data), ma può accettare fino a quattro argomenti.
L'elenco seguente mostra alcune funzioni che vengono usate più di frequente nelle espressioni. Per altre informazioni sulla sintassi corretta per ogni funzione, fare clic sul collegamento corrispondente alla funzione desiderata.
-
La funzione Date viene usata per inserire la data di sistema corrente in un'espressione. Viene in genere usata con la funzione Format, oltre che con gli identificatori dei campi contenenti dati di tipo Data/ora.
=Date()
-
La funzione DatePart viene usata per determinare o estrarre una parte di data, in genere una data recuperata da un identificatore di campo, ma a volte anche un valore di data restituito da un'altra funzione, ad esempio la funzione Date.
DatePart ( "yyyy", Date())
-
La funzione DateDiff viene usata per determinare la differenza tra due date, in genere tra una data recuperata da un identificatore di campo e una data restituita dalla funzione Date.
=DateDiff(“d”, Now(), [Orders].[ReceiveBefore])-10
-
La funzione Format viene usata per applicare un formato a un identificatore e ai risultati di un'altra funzione.
Format([Date],"ww")=Format(Now(),"ww")-1
-
La funzione IIf viene usata per valutare un'espressione come True o False e quindi restituire un valore se l'espressione restituisce True e un valore diverso se l'espressione restituisce False.
=IIf([CountryRegion]="Italy", "Italian", "Some other language")
-
La funzione InStr viene usata per cercare la posizione di un carattere o una stringa all'interno di un'altra stringa. La stringa oggetto della ricerca viene in genere ottenuta da un identificatore di campo.
InStr(1,[IPAddress],".")
-
Le funzioni Left, Mid e Right vengono usate per estrarre caratteri da una stringa, a partire dal carattere a sinistra (Left), da una posizione specifica al centro (Mid) oppure dal carattere a destra (Right). Vengono in genere usate in combinazione con la funzione InStr. La stringa da cui queste funzioni estraggono i caratteri viene di solito ottenuta da un identificatore di campo.
Left([ProductName], 1) Right([AssetCode], 2) Mid([Phone],2,3)
Per un elenco di funzioni, vedere Funzioni (ordinate per categoria).
Operatori
Un operatore è una parola o un simbolo che indica una specifica relazione aritmetica o logica tra gli altri elementi di un'espressione. Gli operatori possono essere suddivisi nei tipi seguenti:
-
Operatori aritmetici, ad esempio il segno di addizione (+).
-
Operatori di confronto, ad esempio il segno di uguale (=).
-
Operatori logici, ad esempio Not.
-
Operatori di concatenazione, ad esempio &.
-
Operatori speciali, ad esempio Like.
Gli operatori vengono in genere usati per indicare una relazione tra due identificatori. Le tabelle seguenti descrivono gli operatori che è possibile usare nelle espressioni di Access.
Operatori aritmetici
Gli operatori aritmetici consentono di calcolare un valore da due o più numeri oppure di modificare il segno di un numero da positivo a negativo.
Operatore |
Scopo |
Esempio |
---|---|---|
+ |
Somma due numeri. |
[Subtotale]+[IVA] |
- |
Trova la differenza tra due numeri oppure indica il valore negativo di un numero. |
[Prezzo]-[Sconto] |
* |
Moltiplica due numeri. |
[Quantità]*[Prezzo] |
/ |
Divide il primo numero per il secondo. |
[Totale]/[NumeroElementi] |
\ |
Arrotonda entrambi i numeri su interi, divide il primo per il secondo, quindi tronca il risultato in un intero. |
[Registrati]\[Sale] |
Mod |
Divide il primo numero per il secondo e restituisce solo il resto. |
[Registrati] Mod [Sale] |
^ |
Eleva un numero alla potenza di un esponente. |
Numero ^ Esponente |
Operatori di confronto
Gli operatori di confronto confrontano i valori e restituiscono un risultato True, False oppure Null (valore sconosciuto).
Operatore |
Scopo |
---|---|
< |
Determina se il primo valore è minore del secondo valore. |
<= |
Determina se il primo valore è minore o uguale al secondo valore. |
> |
Determina se il primo valore è maggiore del secondo valore. |
>= |
Determina se il primo valore è maggiore o uguale al secondo valore. |
= |
Determina se il primo valore è uguale al secondo valore. |
<> |
Determina se il primo valore non è uguale al secondo valore. |
In tutti i casi, se il primo o il secondo valore è Null, anche il risultato sarà Null. Poiché un valore Null rappresenta un valore sconosciuto, anche il risultato di qualsiasi confronto con valori Null sarà sconosciuto.
Operatori logici
Gli operatori logici consentono di combinare due valori e restituire un risultato True, False o Null. Gli operatori logici vengono definiti anche operatori booleani.
Operatore |
Utilizzo |
Descrizione |
---|---|---|
And |
Espressione1 And Espressione2 |
Restituisce True se Espressione1 ed Espressione2 sono entrambe True. |
Or |
Espressione1 Or Espressione2 |
Restituisce True se Espressione1 oppure Espressione2 è True. |
Eqv |
Espressione1 Eqv Espressione2 |
Restituisce True se Espressione1 ed Espressione2 sono entrambe True oppure entrambe False. |
Not |
Not Espressione |
Restituisce True se Espressione non è True. |
Xor |
Espressione1 Xor Espressione2 |
Restituisce True se Espressione1 è True oppure se Espressione2 è True, ma non entrambe. |
Operatori di concatenazione
Gli operatori di concatenazione consentono di combinare due valori di testo in un'unica stringa.
Operatore |
Utilizzo |
Descrizione |
---|---|---|
& |
stringa1 & stringa2 |
Combina due stringhe per formarne una sola. |
+ |
stringa1 + stringa2 |
Combina due stringhe in un'unica stringa e propaga i valori Null. |
Operatori speciali
Usare gli operatori speciali in base alle istruzioni della tabella seguente.
Operatore |
Descrizione |
Per altre informazioni |
---|---|---|
Is Null or Is Not Null |
Determina se un valore è Null o Not Null. |
|
Like "pattern" |
Esegue il confronto dei valori delle stringhe usando i caratteri jolly ? e *. |
|
Between val1 And val2 |
Determina se un valore numerico o di data è incluso in un intervallo. |
|
In(string1,string2...) |
Determina se un valore stringa è incluso all'interno di un set di valori stringa. |
Costanti
Una costante è un valore conosciuto che non varia e che può essere usato in un'espressione. In Access sono disponibili quattro tipi di costanti comunemente usate:
-
True Indica un valore logicamente vero.
-
False Indica un valore logicamente falso.
-
Null Indica l'assenza di un valore conosciuto.
-
"" (empty string) Indica un valore notoriamente vuoto.
Le costanti possono essere usate come argomenti di una funzione, nonché in un'espressione come parte di un criterio. Ad esempio, è possibile usare la costante relativa alla stringa vuota ("") come parte di un criterio per una colonna di una query per valutare i valori dei campi di tale colonna, immettendo come criterio quanto segue: <>"". In questo esempio <> corrisponde a un operatore e "" a una costante. Usati insieme, indicano che l'identificatore a cui fanno riferimento deve essere confrontato con una stringa vuota. L'espressione che ne deriva è vera (True) se il valore dell'identificatore è diverso da una stringa vuota.
Prestare particolare attenzione quando si usa la costante Null. Nella maggior parte dei casi l'uso della costante Null in combinazione con un operatore di confronto restituirà un errore. Se si vuole eseguire un confronto tra un valore e Null in un'espressione, usare l'operatore Is Null o Is Not Null.
Valori
Nelle espressioni è possibile usare valori letterali, ad esempio il numero 1.254 o la stringa "Immettere un numero compreso tra 1 e 10". È inoltre possibile utilizzare valori numerici, che possono essere costituiti da una serie di cifre e includere, se necessario, un segno e una virgola decimale. In assenza di un segno, Access presuppone un valore positivo. Per specificare un valore negativo, includere il segno meno (-). È inoltre possibile utilizzare la notazione scientifica. A tale scopo, includere "E" o "e" e il segno dell'esponente, ad esempio 1,0E-6.
Quando si usano stringhe di testo, racchiuderle tra virgolette per assicurarne la corretta interpretazione in Access. In alcune circostanze, le virgolette vengono inserite automaticamente. Se ad esempio si digita testo in un'espressione per una regola di convalida o per i criteri di una query, le stringhe di testo vengono racchiuse automaticamente tra virgolette.
Se si digita ad esempio il testo Paris, nell'espressione viene visualizzato "Paris". Se si vuole che un'espressione restituisca una stringa racchiusa tra virgolette, racchiudere la stringa annidata tra virgolette singole (') o all'interno di tre serie di virgolette doppie ("). Le espressioni seguenti sono ad esempio equivalenti:
Forms![Contacts]![City]. DefaultValue = ' "Paris" '
Forms![Contacts]![City].DefaultValue = " " "Paris" " "
Per usare valori di data/ora, racchiuderli tra cancelletti (#). Ad esempio, #7-3-17#, #7-mar-17# e #7-mar-2017# sono tutti i valori di data/ora validi. Quando viene rilevato un valore di data/ora valido racchiuso tra caratteri #, viene considerato automaticamente come un tipo di dati Data/ora.
Il limite di annidamento per le espressioni in un database Web è 65
Le espressioni con più di 65 livelli di annidamento non funzionano nel browser ed è pertanto consigliabile non usare tali espressioni in un database Web di Access. Non verrà visualizzato alcun messaggio di errore, l'espressione semplicemente non funzionerà.
L'uso degli operatori &, AND e OR può creare nel server livelli di annidamento aggiuntivi di cui non si trova corrispondenza nel client di Access. L'espressione "a" & "b" & "c" non è ad esempio annidata nel Generatore di espressioni, ma in SharePoint diventa concatenate.Db("a", concatenate.Db("b", "c") ). Questa trasformazione crea un livello di annidamento. L'uso di diversi operatori &, AND o OR consecutivi in una singola espressione può causare il superamento del limite di annidamento del server, che è pari a 65, e a questo punto l'espressione non funzionerà nel browser.