Access - Maschera di ricerca su campo numerico

Anonimo
2024-03-24T08:12:10+00:00

Buongiorno a tutti,

Premetto che ho una conoscenza di access superficiale e praticamente nulla di sql. Ma voglio comunque esporre il mio problema in maniera molto semplificata rispetto alla realtà per capire come fare. Ho un database cinema. Supponiamo che La tabella principale film ha due solo campi: Titolo (testo) - Voto (numerico).

Ho creato una maschera “cerca film” di ricerca che tramite due caselle di testo (nominate “cerca titolo” e “cerca voto”) mi filtrino in base ai parametri da me inseriti i film in una sottomaschera. Ho creato quindi una query “cerca film” coi due campi (titolo e voto) provenienti dalla tabella film: quindi La prima casella cerca titolo film funziona tranquillamente con l’istruzione di query nel campo titolo “like “*” & [maschere]![cerca film]![cerca titolo] & “*”…grazie a questa istruzione se nella casella di testo inserisco “Arancia M” nella query e quindi nella sottomaschera mi restituisce Arancia Meccanica. Quindi tutto bene.

Se copio la stessa istruzione nell’altro campo di query (voto) invece sono dolori. Infatti di default mi esclude tutti i film che non ho visto vale a dire tutti i record che hanno il campo voto non valorizzato.

Premettendo che in quel campo ci sono queste possibilità …campo vuoto per i film non visti e voti da 1 a 10 (con in più i mezzi voti)per quelli visti. Come posso adeguare quel codice per farmi tirare fuori i film non visti se nella casella cerca voto lascio il campo non valorizzato?

Ho provato a ragionare anche in maniera diversa utilizzando una casella combo “cerca voto1” con valori predefiniti “senza voto” più voti “1-1,5-2 e così via” e utilizzando nella query l’istruzione iff ma neanche così sono riuscito a risolvere. Cioè utilizzando nel campo voto della query:

iff([maschere]![cerca film]![cerca voto1]=senza voto; Is Null; Is Not Null)

non mi restituisce nessun campo. Mentre se per prova attribuisco a senza voto con la funzione iif qualsiasi altro valore (ad esempio se gli dico che per senza voto mi deve restituire i film a cui ho dato voto 8 mentre nel caso in cui sia selezionato qualsiasi altro valore che non sia senza voto mi deve restituire i film con voto 7) la query e la maschera lavorano benissimo. Quindi il problema è sempre su null e not null.

Sono sicuro che si tratta di un problema non insormontabile ma ci sto sbattendo la testa da tempo e qualsiasi prova faccia sulla base di quello che trovo online (che provo ad adeguare al mio caso) il risultato è sempre che non ottengo record quando voglio provare ad estrarre tramite maschera i film che non ho visto….

Grazie per l’attenzione e sorry per la lunghezza dello scritto…

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

6 risposte

Ordina per: Più utili
  1. Anonimo
    2024-04-03T08:38:41+00:00

    Ciao Domenico,

    la soluzione da te proposta è perfetta. Nel senso che rispecchia proprio quanto voglio fare nel mio db. Ora provo ad adeguarla fedelmente nel mio db e pur conoscendo poco e nulla di sql/vba per me è un obiettivo sfidante che spero di riuscire a portare a termine...

    Saluti e poi alla fine ti/vi faccio sapere come è andata

    La risposta è stata utile?

    0 commenti Nessun commento
  2. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2024-03-29T12:16:18+00:00

    Ciao,

    al seguente link Films.accdb

    ti propongo una diversa gestione del tuo problema.

    Facci sapere

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2024-03-28T14:45:49+00:00

    Pubblica il predicato SQL della query.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2024-03-28T08:50:06+00:00

    Ciao Domenico innanzitutto Grazie per il suggerimento ma non riesco ad applicarlo perché la mia maschera continua ricava i dati proprio da una query e questo per problemi strutturali del mio db per come l’ho ”pensato” sin dall’inizio.

    Come ti ho detto la mia era una semplificazione ma là realtà è questa è forse se sono più realistico riesco a farvi capire meglio di che si tratta. Dunque ho due tabelle fondamentali:

    1. Film: con campi Titolo (testo) - Regista Id (numerico) - Anno (numerico) - Voto (numerico)

    Il campo Voto prevede per i film non visti campo vuoto o voti che vanno da 1 a 10 con i mezzi voti per quelli visti.

    1. Registi: Id (chiave primaria con numerazione automatica) - Cognome e Nome - più una serie di campi biografici del regista

    Relazione con integrità referenziale tra Id (tabella registi) e Regista Id (tabella film) 1 a ♾️

    Quindi ho creato una query “Cerca Film” che prende Titolo, Anno e Voto dalla tabella Film e Cognome e Nome dalla tabella Registi.

    Su questa query ho creato la maschera continua ”Cerca Modifica Film” con gli stessi campi della query e ho introdotto in alto quattro caselle di testo per effettuare la ricerca che vanno ad interrogare la query Cerca Film.

    Le quattro caselle di testo le ho chiamate

    Cerca Titolo Film, Cerca Regista Film, Cerca Anno Film, Cerca Voto.

    Mettendo nella query di origine in criteri nel campo Titolo l’istruzione:

    Like “*” & [Maschere]![Cerca Modifica Film]![Cerca Titolo Film] & “*”

    Nelle proprietà della casella di testo in Evento dopo Aggiornamento ho aggiunto in Vba l’istruzione Requery.Me

    Quindi se digito nella casella Cerca Titolo Film “Arancia” la maschera mi restituisce correttamente gli unici due film nel db che contengono questa parola (Arancia Meccanica e l’Anatra all’Arancia). Dunque ottimo.

    Comportandomi in maniera analoga per le altre caselle ottengo lo stesso risultato perfetto sia per la ricerca del Regista sia per l’anno.

    Il problema si crea per la casella voto perché se utilizzo la stessa istruzione nella query sotto il campo Voto: Like “*” & [Maschere]![Cerca Modifica Film]![Cerca Voto] & “*” mi esclude di base tutti i film senza voto dalla maschera continua.

    Quindi quello che mi occorre sapere è se esiste una istruzione di query che di base quando nella casella in “cerca voto” lascio il campo vuoto mi restituisca i film che non hanno voto e che invece quando seleziono un qualsiasi voto mi restituisca i film che hanno quel voto. Esempio metto “Kubri” nella casella cerca regista film lascio vuoto il campo Voto vorrei che mi restituisse i film di Kubrick che non ho visto. Ovviamente (già ci ho provato ma non ho cmq trovato l’istruzione adatta) sarebbe anche più funzionale mettere una casella combinata al posto di una casella di testo per effettuare la ricerca per voto con valori predefiniti “senza voto (per i film che hanno null come voto) e i voti numerici da 1 a 10 più i mezzi voti”…ma non riesco a far dialogare la casella combinata con la query sottostante e il relativo campo Voto.

    Vi ringrazio in anticipo se qualcuno mi riesce a dare qualche idea in merito…e scusatemi veramente per l’eccessiva lunghezza dello scritto

    La risposta è stata utile?

    0 commenti Nessun commento
  5. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2024-03-24T11:55:17+00:00

    Ciao Gianluca,

    cerco di capire il problema.

    Nella maschera hai due controlli per poter filtrare il titolo oppure il voto.

    Non è necessaria una query ma puoi utilizzare il me.Filter della maschera.

    Nell'evento dopo aggiornamento del controllo del titolo puoi impostare:

    Me.Filter = "Titolo Like '*" & Me.CercaTitolo & "*'"

    Me.FilterOn = True

    Per il filtro sul voto penso ti convenga utilizzare una combo (casella combinata) come hai fatto e quindi avrai qualcosa del genere

    if Me.cbo_Voto = "Senza voto" then

    Me.Filter = "Voto Is Null"

    else

    Me-Filter = "Voto = " & Me.cbo_Voto

    end If

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento