[RISOLTO]Ricerca record con campi vuoti

di il
16 risposte

[RISOLTO]Ricerca record con campi vuoti

Salve a tutti, è da un po che non scrivo. D'altronde il mio precedente database va benissimo. Ora ho creato un altro piccolo database per la pensione per cani che gestisco. E' praticamente pronto, ho solo un problema con una ricerca per data. Vi sarei molto grata se riusciste ad aiutarmi (ovviamente senza impegno). Vi riassumo i dati:

tblcani:
ID (chiave primaria)
nome
microchip
proprietario
altre caselle...

tblpresenze:
ID (chiave primaria)
dataingresso
IDcane
dataprevistauscita
datauscita

Relazione 1 a molti tra ID e IDcane

Nella maschera di avvio, ho creato una casella combinata per la ricerca in base al nome del cane con relativo pulsante che apre una maschera basata su query. E qui tutto funziona bene. Poi ho le due caselle data per la ricerca tra due date ed il relativo pulsante che apre la maschera basata su query. E anche qui tutto funziona bene.

Ora il problema:
Zeus entra il 01/06/2020 esce il 08/06/2020
Pippo entra il 01/06/2020 esce il 10/06/2020
Kira entra il 03/06/2020 (non esce, perchè ancora in pensione)
Apollo entra il 03/06/2020 esce il 05/06/2020

Bene, io vorrei sapere quali cani sono presenti nella struttura nel giorno 06/06/2020 (per cui Zeus, Pippo e Kira).

Ho creato una query, e nel campo dataingresso, nei criteri ho scritto <=[Maschere]![Avvio]![caselladata]
nel campo datauscita nei criteri ho scritto >=[Maschere]![Avvio]![caselladata]
Così mi trova tutti i record che hanno la data di uscita, ma Kira non ce l'ha e non me la restituisce.
Ho provato nel campo datauscita ,nei criteri a scrivere If IsNull([datauscita]) then = Date() else >=[Maschere]![Avvio]![caselladata] per usare la data corrente, ma non funziona.
Mi sono impallata qui.
Qualcuno può aiutarmi?
Grazie

16 Risposte

  • Re: [RISOLTO]Ricerca record con campi vuoti

    La query dovrà avere una WHERE condition che inglobi il record se la data DataUscita è NULL...

    Quindi:
    
    DataIngresso<=Dataricerca AND (DataUscita>=DataRicerca OR DataUscita Is Null)
    Attenzione alle parentesi...
  • Re: [RISOLTO]Ricerca record con campi vuoti

    Ciao Alex, GRAZIE!!!! Funziona, anche troppo. Nel senso che tiene conto anche dei record con datauscita vuota successivi alla data di ricerca
  • Re: [RISOLTO]Ricerca record con campi vuoti

    Cosa significa quello che dici...?
    Se la data è vuota li prende solo se dataingresso<=dataricerca che ovviamente significa che è ancora dentro...
  • Re: [RISOLTO]Ricerca record con campi vuoti

    Nel senso che mi ha inserito nei risultati anche un record con dataingresso al 04/07/2020 (che in datauscita è vuoto), per cui successivo alla dataricerca specificata al 03/06/2020
  • Re: [RISOLTO]Ricerca record con campi vuoti

    Apparentemente se hai usato BENE le parentesi è impossibile.
    La traduzione del confronto verrebbe cosi:
    04/07/2020 <= 03/06/2020 Questo restituisce FALSE ed è proprio questo primo blocco che già dovrebbe escludere nonostante il secondo blocco dia TRUE... in quanto a livello di algebra di boole FALSE AND TRUE = FALSE

    Togli la seconda parte e verifica cosa succede con la sola prima... non vorrei possa esserci un errore di formattazione della data in accezione anglosassone con conseguente inversione gg/mm che comporterebbe... anche se non cambierebbe il valore booleano del confronto...
  • Re: [RISOLTO]Ricerca record con campi vuoti

    Allora, se tolgo la seconda parte funziona. Ovviamente non mi comprende il record con datauscita vuota.
    Se lo inserisco mi prende anche i record dopo la dataricerca.
    Comincio a sospettare che sia il programma ad avere problemi. Visto che in un'altra query di ricerca continua a restituirmi i record con id non in ordine crescente (anche se il criterio è specificato). Boh.
  • Re: [RISOLTO]Ricerca record con campi vuoti

    Niente, continuo a provare, ma niente
    Mi seleziona anche i record successivi (per dataingresso) alla datarichiesta
    Ho provato con il criterio if isnull then, ma mi dice che manca operatore e mi evidenzia then.
    Non capisco
  • Re: [RISOLTO]Ricerca record con campi vuoti

    Tiziana ha scritto:


    Zeus entra il 01/06/2020 esce il 08/06/2020
    Pippo entra il 01/06/2020 esce il 10/06/2020
    Kira entra il 03/06/2020 (non esce, perchè ancora in pensione)
    Apollo entra il 03/06/2020 esce il 05/06/2020

    Bene, io vorrei sapere quali cani sono presenti nella struttura nel giorno 06/06/2020 (per cui Zeus, Pippo e Kira).
    ...poi c'è il suggerimento di @Alex...poi

    Tiziana ha scritto:


    Allora, se tolgo la seconda parte funziona. Ovviamente non mi comprende il record con datauscita vuota.
    Se lo inserisco mi prende anche i record dopo la dataricerca.

    Tiziana ha scritto:


    Funziona, anche troppo. Nel senso che tiene conto anche dei record con datauscita vuota successivi alla data di ricerca

    @Alex ha scritto:


    Cosa significa quello che dici...?

    Tiziana ha scritto:


    Allora, se tolgo la seconda parte funziona. Ovviamente non mi comprende il record con datauscita vuota.
    Se lo inserisco mi prende anche i record dopo la dataricerca.
    Anche per me c'è qualche informazione di Tiziana non chiara e/o contraddittoria.
    Io preferisco il suggerimento di @Alex...toh, per avere le spalle più sicure...prova a mettere parentesi più chiare e nette, così
    (DataIngresso<=Dataricerca) AND ((DataUscita>=DataRicerca) OR (DataUscita Is Null))
    Provo a dare un altro suggerimento "alla Osvaldo" (veramente poco tecnico). Credo di essermi imbattuto anch'io in un problema simile e ricordo di averlo aggirato (per pigrizia sicuramente) mettendo una data molto lontana nel futuro di default (es. 31/12/9999...che quando la vedi, capisci subito il suo significato…) al posto di Null. In questo caso il controllo Null si può togliere.
  • Re: [RISOLTO]Ricerca record con campi vuoti

    Ciao Osvaldo, partiamo da un dato di fatto: non sono capace di spiegarmi (sempre). Vi copio il codice nella query:
    WHERE (((tblpresenze.DataIngresso)<=[Maschere]![Avvio]![DataPrecisa]) AND ((tblpresenze.DataUscita)>=[Maschere]![Avvio]![DataPrecisa])) OR (((tblpresenze.DataUscita) Is Null))
    Sicuramente è un errore di sintassi (troppe parentesi per me....) non ci capisco....
  • Re: [RISOLTO]Ricerca record con campi vuoti

    Tiziana ha scritto:


    (troppe parentesi per me....) non ci capisco
    Anch'io non sono bravo con l'SQL. Prova ad andare in "visualizzazione struttura query" e impostare i Criteri così:
    Soluzione A)
    Sotto il campo DataIngresso scrivi:
    <=[Maschere]![Avvio]![DataPrecisa]
    Sotto il campo DataUscita scrivi:
    >=DataRicerca OR Is Null

    Soluzione B) (per i durissimi di comprendonio):
    Sotto il campo DataIngresso scrivi 2 volte nei righi sottostanti:
    <=[Maschere]![Avvio]![DataPrecisa]
    Sotto il campo DataUscita scrivi:
    1° rigo: >=DataRicerca
    2° rigo: Is Null

    N.B.: io sto continuando a seguire la logica (credo corretta) fornita da @Alex.
  • Re: [RISOLTO]Ricerca record con campi vuoti

    Osvaldo TI ADOROOOOOO
    con la soluzione A niente, diceva espressione troppo difficile
    con la sluzione B tutto perfetto
    Non ci posso credere....
    GRAZIE GRAZIE GRAZIE
    Domanda, come faccio a segnare il post come RISOLTO?
  • Re: [RISOLTO]Ricerca record con campi vuoti

    Tiziana ha scritto:


    Domanda, come faccio a segnare il post come RISOLTO?
    Modifichi il Titolo scrivendo [Risolto] davanti al testo iniziale. Non è obbligatorio.
  • Re: [RISOLTO]Ricerca record con campi vuoti

    Comunque la scrittura corretta è:
    
    WHERE (((tblpresenze.dataingresso)<=[Maschere]![Avvio]![caselladata]) AND ((tblpresenze.datauscita)>=[Maschere]![Avvio]![caselladata] Or (tblpresenze.datauscita) Is Null))
    
  • Re: [RISOLTO]Ricerca record con campi vuoti

    Stifone ha scritto:


    Comunque la scrittura corretta è: ....
    Che è quello scritto da Alex come prima risposta
Devi accedere o registrarti per scrivere nel forum
16 risposte