Come filtrare un report in Access: tutorial pratico

Per filtrare un report in Access puoi usare una query con criteri, applicare un filtro al report oppure aprirlo da VBA con DoCmd.OpenReport e l’argomento WhereCondition. Se cerchi una guida pratica su report access, la scelta migliore dipende da quanto il filtro è stabile, da dove arriva il valore e da quanti record devono essere caricati.

Che cosa significa filtrare un report

Filtrare significa limitare i record mostrati senza cambiare i dati memorizzati. Lo stesso report può così mostrare tutti i clienti, soltanto quelli di Roma, gli ordini di un mese o le fatture di un singolo cliente. Questo evita di creare decine di report quasi identici.

La progettazione corretta separa il layout dal criterio. Il report resta uno, mentre query, parametri o WhereCondition determinano il sottoinsieme di record. È più semplice da mantenere e riduce il rischio che versioni diverse del report diventino incoerenti.

Tre strategie principali

Filtro nella query

È ideale per criteri stabili o per ridurre il dataset prima che arrivi al report. Puoi usare WHERE, parametri o riferimenti a una maschera. Su archivi grandi è spesso la soluzione più efficiente.

Filtro salvato o proprietà del report

Può essere utile quando l’utente lavora direttamente in una vista del report e applica filtri temporanei. Verifica sempre il comportamento nella modalità di apertura usata dall’applicazione.

DoCmd.OpenReport con WhereCondition

È molto comodo quando un pulsante in maschera apre il report per il record o i criteri scelti dall’utente. Microsoft Learn documenta WhereCondition come una clausola SQL WHERE valida senza la parola WHERE.

Filtrare con una query

Supponiamo di avere una query Ordini e voler mostrare soltanto lo stato Aperto:

SELECT * FROM Ordini WHERE Stato='Aperto';

Usa questa query come Origine record del report. Il vantaggio è che il report riceve già soltanto i record necessari.

Filtrare per numero

Per un campo numerico:

WHERE IDCliente=125

In VBA:

DoCmd.OpenReport "rptOrdini", acViewPreview, , "IDCliente=125"

I numeri non richiedono apici.

Filtrare per testo

Per testo servono delimitatori:

WHERE Provincia='RM'

Da VBA devi costruire una stringa valida. Se il valore può contenere apostrofi, sostituiscili o usa una strategia parametrica. Concatenare input non controllato è fragile.

Filtrare per data

Access usa il delimitatore # nelle espressioni SQL date. Per evitare ambiguità di formato quando costruisci SQL in VBA, formatta la data in modo prevedibile.

filtro = "DataOrdine >= #" & Format(Me.txtDa,"yyyy-mm-dd") & "#"

Per intervalli con ore, considera che una data senza ora rappresenta mezzanotte. Se vuoi includere l’intera giornata finale, gestisci correttamente il confronto.

Aprire il report per il record corrente

Da una maschera cliente:

DoCmd.OpenReport "rptCliente", acViewPreview, , "IDCliente=" & Me.IDCliente

È una tecnica molto usata perché evita query parametro e apre direttamente il report giusto.

Usare più condizioni

Puoi combinare condizioni con AND:

Stato='Aperto' AND Provincia='RM'

oppure OR:

Provincia='RM' OR Provincia='VT'

Con condizioni miste usa parentesi per rendere esplicita la precedenza.

Filtri facoltativi da maschera

Una maschera filtro può avere Cliente, Stato, DataDa e DataA. Costruisci WhereCondition aggiungendo soltanto i criteri compilati. Questo evita finestre parametro multiple e rende l’interfaccia più chiara.

In VBA inizializza una stringa vuota e concatena AND solo quando necessario. Gestisci IsNull per ogni controllo.

Contare i record prima di aprire

Per evitare un report vuoto puoi verificare se esistono record con DCount o aprire comunque e gestire l’evento Nessun dato. La seconda soluzione centralizza la logica nel report; la prima permette di mostrare un messaggio immediato.

Filtro fisso o dinamico?

Un filtro fisso appartiene spesso alla query. Un filtro dinamico scelto da un utente appartiene più naturalmente a una maschera e a WhereCondition o parametri. Non duplicare report solo per cambiare Provincia, Anno o Cliente.

Origine record e prestazioni

Se il report usa una query complessa che carica milioni di righe e poi filtra dopo, può essere lento. Cerca di applicare i criteri il prima possibile. Su tabelle collegate o SQL Server questo riduce traffico e tempi.

FilterName di OpenReport

DoCmd.OpenReport accetta anche FilterName, cioè il nome di una query valida usata come filtro. È utile se hai un filtro salvato e riutilizzabile. WhereCondition è più diretto per condizioni costruite al volo.

OpenArgs

OpenArgs serve a passare informazioni al report, ma non è un sostituto automatico del filtro. Puoi passare un valore e usarlo nell’evento Open/Load, ma per limitare record WhereCondition è generalmente più semplice.

Filtrare e poi stampare

Apri in acViewPreview quando vuoi controllare il risultato. Se usi acViewNormal il report può essere inviato direttamente alla stampante, quindi durante sviluppo è più sicuro usare Anteprima.

Filtrare e poi esportare PDF

Apri il report filtrato, verifica che sia il report attivo e usa l’esportazione prevista. Se automatizzi l’output, crea un nome file sicuro e gestisci caratteri non validi.

Problema: il filtro non restituisce record

Apri la query con lo stesso criterio. Controlla spazi, maiuscole se rilevanti, valori Null e tipi dati. Un ID numerico confrontato con testo può generare risultati inattesi.

Problema: Access chiede un parametro

Un nome non riconosciuto viene spesso interpretato come parametro. Verifica nome campo e nome controllo. Se usi Forms!frmFiltro!txtValore, la maschera deve essere aperta.

Problema: apostrofi nel testo

Un nome come D’Angelo rompe una stringa SQL costruita male. Sostituisci l’apostrofo con due apostrofi nella stringa SQL oppure preferisci query parametrizzate quando il valore è complesso.

Problema: date interpretate male

Evita formati locali ambigui nelle stringhe SQL VBA. Usa Format con un formato non ambiguo e prova date come 1 febbraio e 2 gennaio, perché sono ottimi casi per scoprire inversioni giorno/mese.

Null

Un confronto = Null non funziona come molti utenti si aspettano. Per cercare valori mancanti usa Is Null. Per escluderli usa Is Not Null.

Filtrare con Like

Per ricerche testuali puoi usare Like e caratteri jolly appropriati al database. Verifica se il database usa ANSI-89 o ANSI-92 prima di scegliere * oppure %. Non assumere una sintassi senza controllo.

Microsoft 365 e Access 2024

Le funzioni descritte sono riferite ad Access desktop corrente su Windows. DoCmd.OpenReport è documentato in Microsoft Learn; le funzioni di query e report sono disponibili nelle versioni desktop recenti, incluse Microsoft 365 e Access 2024.

Access Runtime

Il filtro da maschera è ideale per Runtime. L’utente seleziona i criteri e preme un pulsante senza entrare in progettazione. Prepara tutto con Access completo e prova i percorsi di errore.

32 bit e 64 bit

WhereCondition non cambia. Se la maschera usa API o componenti esterni, verifica compatibilità.

Sicurezza e input

Valida gli input. Anche in un database locale, stringhe SQL costruite senza controllo possono causare errori. Non concatenare valori provenienti da controlli senza gestire delimitatori e tipi.

Checklist

  1. Decidi filtro fisso o dinamico.
  2. Verifica tipo dati.
  3. Prova il criterio nella query.
  4. Gestisci Null.
  5. Gestisci apostrofi.
  6. Controlla date.
  7. Apri in Anteprima.
  8. Conta i record.
  9. Prova PDF.
  10. Documenta il filtro.

Link interni

Consulta sempre la categoria Guide Access e le guide su report da query, creare report, report vendite mensili e report elenco clienti.

Fonte Microsoft

La parte VBA è stata verificata sulla documentazione Microsoft Learn: DoCmd.OpenReport, che documenta FilterName, WhereCondition e OpenArgs.

FAQ

Meglio query o WhereCondition?

Query per filtri stabili e dataset complessi; WhereCondition per criteri dinamici da maschera.

Posso usare più condizioni?

Sì, combina AND/OR con parentesi appropriate.

Perché il testo con apostrofo dà errore?

Perché interrompe la stringa SQL se non viene escapato correttamente.

Come filtro una data?

Usa il tipo Date/Ora e una sintassi coerente; in SQL Access le date sono delimitate da #.

Runtime funziona?

Sì, ed è uno degli scenari migliori per una maschera filtro con pulsante.

Posso aprire direttamente in stampa?

Sì, ma durante sviluppo usa Anteprima per evitare stampe accidentali.

Come cerco Null?

Usa Is Null o Is Not Null, non = Null.

Il filtro modifica i dati?

No, limita soltanto i record mostrati.

Conclusione

Filtrare un report in Access è più efficace quando scegli la tecnica in base al contesto. Usa la query per criteri stabili o grandi dataset, WhereCondition per filtri scelti da una maschera e parametri quando vuoi una query riutilizzabile. Gestisci correttamente tipi dati, date, Null e apostrofi, prova sempre il criterio sulla query e apri il report in Anteprima durante il collaudo. In questo modo puoi mantenere un solo report flessibile invece di creare copie quasi identiche.

Lascia un commento