Filtro di ricerca tra date in una maschera

di il
12 risposte

Filtro di ricerca tra date in una maschera

Buonasera a tutti, ho creato un database su un'unica tabella con diversi campi, sto creando ora una maschera di ricerca dove il primo filto viene applicato tramite una combo box che ho impostato in modo tale che generi una query di ricerca all'interno dei record e quindi mi visualizzi nel corpo della maschera solo quelli selezionati. Ora ho creato due caselle di testo Data1 e Data2 e un pulsante cmdCerca, avrei bisogno di aiuto sul codice necessario per far sì che quando lo premo lui mi filtri ulteriormente i campi già filtrati con la combobox cercando solo i record che nel campo data hanno una data compresa tra quelle che inserisco nelle caselle di testo. Ho provato con il generatore di macro ma non ci sono riuscito e purtroppo non conosco quasi nulla di codice VBA, qualcuno potrebbe gentilmente aiutarmi?
Grazie mille.

12 Risposte

  • Re: Filtro di ricerca tra date in una maschera

    Hai creato un foglio di Excel non un database... sei sicuro di aver capito come funzionano i Database...? ( domanda retorica la risposta è NO perché non si lavora con 1 tabella altrimenti hai veramente sbagliato applicativo)

    Il codice cosi come lo stai chiedendo non è una cosa apprezzata...
    L'argomento è stato trattato molte volte prova a fare una ricerca.
  • Re: Filtro di ricerca tra date in una maschera

    Grazie per la risposta, farò una ricerca all'interno del forum.
  • Re: Filtro di ricerca tra date in una maschera

    @Alex ha scritto:


    Hai creato un foglio di Excel non un database... sei sicuro di aver capito come funzionano i Database...? ( domanda retorica la risposta è NO perché non si lavora con 1 tabella altrimenti hai veramente sbagliato applicativo)

    Il codice cosi come lo stai chiedendo non è una cosa apprezzata...
    L'argomento è stato trattato molte volte prova a fare una ricerca.
    Per quanto riguarda il codice inserito nella query ho impostato
    SELECT Dati.Data
    From Dati, Interrogativa
    WHERE((Dati.Data)>=IIf([Interrogativa]![Data1] Is Null,[Dati]![Data],[Interrogativa]![Data1]) And (Dati.Data)<=IIf([Interrogativa]![Data2] Is Null,[Dati]![Data],[Interrogativa]![Data2]))
    Dove ho 2 tabelle (dati e Interrogativa), 1 query e una maschera.
    La maschera presenta i campi data1 e data2 (come testo) che all'evento click di un pulsante presente sulla maschera vengono riportati all'interno della tabella Interrogativa, da qui vengono elaborati tramite la query con il codice sopra riportato e quindi dovrebbero essere mandati a una seconda maschera continua da visualizzare.
    Al momento non sono sicuro del codice inserito in quanto la query non carica alcun dato. Ho letto un post dove tu parlavi di far ricodificare il valore del campo data prima di farlo elaborare dalla query e volevo capire se il controllo tramite
    WHERE [Data]=" & str(cdbl(Me!ControlloData))
    lo posso inserire all'interno del mio campo IIf e soprattutto se può essere fatto lavorando in SQL. Sicuramente sarà una domanda sciocca ma chiedevo solo se sono sulla strada giusta oppure se anche facendo questa operazione il mio codice risulta comunque errato.
    Grazie
  • Re: Filtro di ricerca tra date in una maschera

    Se hai salvato il valore data con Now() non troverai MAI nulla... perchè Now() salva anche hh:mm:ss quindi facendo una ricerca equiparando 2 valori devi accertarti siano comparabili, e francamente che tu riesca adare anche hh:mm:ss precisi per la ricerca... lo trovo improbabile.
    Dico questo in quanto hai usato la funzione per le date che preserva hh:mm:ss... quindi penso tu abbia anche capito il senso che ha questo... e le conseguenze.
    Purtroppo io non so quali errori di non esperienza tu abbia commesso ed è complicato pensare a tutto.
    Penso che se devi cercare una data gg/mm/aaaa quella funzione non vada bene e devi sostituire il cdbl con conguaglio ed imporre un Fix([Data]) se per errore hai valorizzato con NOW() il campo data...
  • Re: Filtro di ricerca tra date in una maschera

    @Alex ha scritto:


    Se hai salvato il valore data con Now() non troverai MAI nulla... perchè Now() salva anche hh:mm:ss quindi facendo una ricerca equiparando 2 valori devi accertarti siano comparabili, e francamente che tu riesca adare anche hh:mm:ss precisi per la ricerca... lo trovo improbabile.
    Dico questo in quanto hai usato la funzione per le date che preserva hh:mm:ss... quindi penso tu abbia anche capito il senso che ha questo... e le conseguenze.
    Purtroppo io non so quali errori di non esperienza tu abbia commesso ed è complicato pensare a tutto.
    Penso che se devi cercare una data gg/mm/aaaa quella funzione non vada bene e devi sostituire il cdbl con conguaglio ed imporre un Fix([Data]) se per errore hai valorizzato con NOW() il campo data...
    Ti ringrazio molto, il mio è certamente un errore di inesperienza legato al fatto che non ho tenuto conto che tale funzione non andava solo a prendere i valori legati al gg/mm/aaaa ma anche all'orario e pertanto era sbvagliato in sostanza in quanto devo far capire al programma di ricerca che deve cercare il valore solo per i campi che mi servono. Ora provo con quello che mi hai suggerito. Grazie.
  • Re: Filtro di ricerca tra date in una maschera

    Mi son trovato a dover creare un report mensile, ma non riesco a risolvere un problema. Ho una maschera con una combobox a due colonne, di cui la prima a lunghezza zero col numero del mese, e la seconda, visibile, con il nome del mese, e una casella di testo nella quale poter inserire l'anno. Ho creato poi una query che vada a cercare all'interno della mia tabella principale con i record filtrando solo tramite "data" e ho inserito questo codice per cercare di far un report mensile:
    SELECT dati.[N° Operazione], dati.Data, dati.Decodifica, dati.Descrizione, dati.Conto, dati.Movimento, dati.Importo
    FROM dati
    WHERE (((dati.Data)=Month([Data]=[Maschere]![Mensile]![Mese]) And (dati.Data)=Year([Data]=[Maschere]![Mensile]![Anno])));
    In questo codice ovviamente la casella mese della maschera è la combo da cui selezionare il mese e anno la casella di testo da cui prendere l'anno. Però non funziona e non estrapola i dati correttamente. Devo forse indicare alla combobox [Mese] da quale colonna prendere il campo mese avendo due colonne? Grazie
  • Re: Filtro di ricerca tra date in una maschera

    Koala83 ha scritto:


    WHERE (((dati.Data)=Month([Data]=[Maschere]![Mensile]![Mese]) And (dati.Data)=Year([Data]=[Maschere]![Mensile]![Anno])));
    La WHERE è del tutto sbagliata. Rifalla, bene, un passo alla volta. Purtroppo QBE e il generatore di espressioni non aiutano in questa situazione. Sarebbe molto più facile scrivere direttamente in SQL.
    Questa è la traduzione di quello che hai scritto lassù e che non funziona
    (dati.Data)=Month([Data]=[Maschere]![Mensile]![Mese]) 
    significa
    Data = MeseDella(Data=MeseDaCombo)
    Una Data non potrà mai essere "un mese". Stesso discorso per l'anno.
    La logica deve essere
    MeseDellaData = MeseDaCombo AND AnnoDellaData = AnnoDaCombo
    Quindi occhio a dove va usata la funzione Month (e poi Year)
  • Re: Filtro di ricerca tra date in una maschera

    Philcattivocarattere ha scritto:


    Koala83 ha scritto:


    WHERE (((dati.Data)=Month([Data]=[Maschere]![Mensile]![Mese]) And (dati.Data)=Year([Data]=[Maschere]![Mensile]![Anno])));
    La WHERE è del tutto sbagliata. Rifalla, bene, un passo alla volta. Purtroppo QBE e il generatore di espressioni non aiutano in questa situazione. Sarebbe molto più facile scrivere direttamente in SQL.
    Questa è la traduzione di quello che hai scritto lassù e che non funziona
    (dati.Data)=Month([Data]=[Maschere]![Mensile]![Mese]) 
    significa
    Data = MeseDella(Data=MeseDaCombo)
    Una Data non potrà mai essere "un mese". Stesso discorso per l'anno.
    La logica deve essere
    MeseDellaData = MeseDaCombo AND AnnoDellaData = AnnoDaCombo
    Quindi occhio a dove va usata la funzione Month (e poi Year)
    Grazie mille, il concetto è chiarissimo, devo dire alla funzione di "estrapolare" un mese e/o anno dalla data che ho, ed in base a quello fare la ricerca... ma posso comunque usare le funzioni month o year, o sono sbagliate a prescindere?
  • Re: Filtro di ricerca tra date in una maschera

    Lo chiedo perché la combo è solo per il mese, per l'anno ho una casella di testo libera dove digirarlo... ed in base a questi due parametri la query deve fare la ricerca.... Il mio problema è alimentato anche dal fatto che la comboi dove inserisco il mese da cercare ha 2 colonne, quella non visibile col numero del mese, e quella invece visibile dove inserisco il nome del mese, quindi alla query devo dire su quale colonna fare la ricerca?
  • Re: Filtro di ricerca tra date in una maschera

    Philcattivocarattere ha scritto:


    Koala83 ha scritto:


    WHERE (((dati.Data)=Month([Data]=[Maschere]![Mensile]![Mese]) And (dati.Data)=Year([Data]=[Maschere]![Mensile]![Anno])));
    La WHERE è del tutto sbagliata. Rifalla, bene, un passo alla volta. Purtroppo QBE e il generatore di espressioni non aiutano in questa situazione. Sarebbe molto più facile scrivere direttamente in SQL.
    Questa è la traduzione di quello che hai scritto lassù e che non funziona
    (dati.Data)=Month([Data]=[Maschere]![Mensile]![Mese]) 
    significa
    Data = MeseDella(Data=MeseDaCombo)
    Una Data non potrà mai essere "un mese". Stesso discorso per l'anno.
    La logica deve essere
    MeseDellaData = MeseDaCombo AND AnnoDellaData = AnnoDaCombo
    Quindi occhio a dove va usata la funzione Month (e poi Year)
    L'ho risccritta così
    WHERE Month(dati.Data)=([Maschere]![Mensile]![Mese]) AND Year(dati.Data)=([Maschere]![Mensile]![Anno]);
    ma credo di aver sbagliato ancora perché non funziona. Ho capito che devo dire alla funzione che deve leggere il mese dalla data e confrontarlo con quello della combo e stessa cosa con l'anno ma forse mi son perso un passaggio...
  • Re: Filtro di ricerca tra date in una maschera

    Ciao

    prova a costruire la query in questa maniera.

    in un campo espressione (una query può avere campi calcolati) digita l'espressione per trovare il mese del campo della tabella ed in un altro campo estrapola invece l'anno.

    ovviamente, poi devi impostare i criteri (condizioni WHERE)

    Nel mio db funziona perfettamente.
  • Re: Filtro di ricerca tra date in una maschera

    Marcdreamer ha scritto:


    Ciao

    prova a costruire la query in questa maniera.

    in un campo espressione (una query può avere campi calcolati) digita l'espressione per trovare il mese del campo della tabella ed in un altro campo estrapola invece l'anno.

    ovviamente, poi devi impostare i criteri (condizioni WHERE)

    Nel mio db funziona perfettamente.
    Grazie mille!!!
Devi accedere o registrarti per scrivere nel forum
12 risposte