Newsgroup: it.comp.appl.access
Titolo: Filtro data inizio/fine su maschera

Ciao a tutti. Ho provato a cercare la soluzione al mio problema nel NG
e nel Sito Comune ma sono ancora in alto mare.
Quello che vorrei ottenere sarebbe di poter filtrare i record della mia
maschera principale partendo da alcune Txtbox contenenti date (ad es.
Data uscita) ed immettendo, attraverso una query, data-inizio e
data-fine, in una maschera dedicata.
Ho provato ad utilizzare questa query trovata in un precedente
intervento ed adattata:
 SELECT [Mia Tabella].[Data uscita]
FROM [Mia Tabella]
WHERE ((([Mia Tabella].[Data uscita]) Between
Nz([Forms]![MascheraDataUscita]![Dal],DMin("[Data uscita]","[Mia
Tabella]")) And Nz([Forms]![MascheraDataUscita]![Al],DMax("[Data
uscita]","[Mia Tabella]"))));
Ho creato una maschera (MascheraDataUscita) con due Txtbox "Dal" "Al"
dove inserire le date.
Se la procedura è esatta (sarebbe già un miracolo...) come posso
filtrare i records nella mia maschera principale partendo da quella di
inserimento delle date?

(.....)

La procedura sembra corretta, però ho delle perplessità a livello applicativo.
Ovvero:
tu hai una maschera di cui vuoi filtrare il contenuto sulla base di ciò che l'utente imposta nei controlli di un'altra
maschera.
Questo, per evitare acrobazie di passaggio dati fra una maschera e l'altra, richiede che la maschera
"MascheraDataUscita" sia sempre aperta.
Allora ti chiedo se non sarebbe possibile inserire i controlli Dal Al nella maschera principale, per esempio nella
sezione intestazione maschera, così da semplificare il tutto.
Se tu facessi così, basterebbe:
- cambiare i riferimenti al nome della maschera nell'istruzione SQL che hai postato
- aggiungere un pulsante cmdFiltra che, nella routine associata all'evento Click, contiene la seguente istruzione
me.requery
oppure, in alternativa invece di usare il pulsante, potresti mettere l'istruzione me.requery nella routine associata
all'evendo AfterUpdate del controllo Dal e del controllo Al; in questo modo appena l'utente digita un valore in una
delle due caselle, i record vengono filtrati "al volo" (attenzione alle prestazioni !).
Vincenzo Turturro
---------------------------------------------
il sito comune di it.comp.appl.access:
http://www.sitocomune.com/
---------------------------------------------
E quello di it.comp.as400
http://www.faq400.com/
---------------------------------------------

VT @ home ha scritto:

Ciao Vincenzo e grazie per la risposta. I problemi che mi si pongono
nel fare ciò che mi suggerisci sono due: Ho una maschera che nel tempo
è diventata strapiena di controlli e non ho proprio lo spazio fisico
per aggiungerne altri ed il filtro, oltre che sulla "Data uscita",
dovrebbe potermi filtrare i records anche su altre date (data ingresso,
data spedizione etc) la mia idea finale era quella di creare nella mia
maschera popup, oltre alle caselle di testo per l'inserimento delle
date, diversi pulsanti di comando che avviassero il filtro esatto a
seconda della scelta dell'utente sulle diverse date nella maschera
principale, una sorta di filtro aggiuntivo sulle date, da affiancare a
quelli già a disposizione su access (quindi, dopo aver filtrato le
date e, possibilmente chiuso la maschera di ricerca, poter continuare a
filtrare in base a selezione o esclusione nei miei vari controlli per
poi togliere i filtri una volta finito.
Il problema è che non so proprio come fare, credevo fosse un tema
abbastanza dibattuto, ma non ho trovato nulla che facesse proprio al
caso mio. Spero in qualche lume....

T_A_O ha scritto:

Per favore, un link, una traccia, un ragguaglio su altri sistemi per
ottenere quanto mi prefiggo...ho spulciato il Sito Comune e scaricato
un sacco di esempi ma non ci riesco, spero che qualcuno voglia darmi
una mano. Marco.

una mano. Marco.
Per ovviare al problema del grande numero di controlli presenti sulla maschera potresti utilizzare un controllo di tipo
"Struttura a schede" e quindi potresti fare a meno della maschera dedicata all'impostazione dei valori filtro.
Se non vuoi o non puoi, potresti usare questo espediente:
- aggiungere nella maschera principale gli stessi controlli (magari anche con lo stesso nome) presenti in
MascheraDataUscita, impostando la proprietà Visible a No
- modificare l'origine record della maschera principale così:
SELECT [Mia Tabella].[Data uscita]
FROM [Mia Tabella]
WHERE [Mia Tabella].[Data uscita] Between
Nz([txtDal],DMin("[Data uscita]","[Mia
Tabella]")) And Nz([txtAl],DMax("[Data
uscita]","[Mia Tabella]"));
- aggiungere in MascheraDataUscita un pulsante nella cui routine associata all'evento SuClick scrivi le seguenti
istruzioni:
' Imposta i controlli nascosti di MascheraPrincipale con i valori dei controlli corrispondenti di MascheraDataUscita
Forms![MascheraPrincipale]!txtDal=me.txtDal
Forms![MascheraPrincipale]!txtAl=me.txtAl
' Ricarica il recordset associato alla maschera principale
Forms![Maschera principale].Requery
' Chiude la maschera
Docmd.Close acForm, Me.Name


 Docmd.Close acForm, Me.Name
Fatto tutto, ma non aprendosi la maschera datauscita il click del
pulsante diventa impossibile. Forse ho capito male io Vincenzo, ma mi
è davvero impossibile modificare l'origine record della maschera
principale, cosa sto sbagliando?
Spero la tua pazienza non si sia esaurita :) un saluto, Marco.

Spero la tua pazienza non si sia esaurita :) un saluto, Marco.
La pazienza no, ma le idee per ora quasi !


 ---------------------------------------------
L'origine record della maschera principale è la "mia tabella" che ha
una settantina di campi tra cui alcuni campi data sui quali vorrei
impostare i filtri. Avevo già provato, copiato i miei controlli e
incollati sulla struttura a schede, ma non mi ricordo per quale motivo,
alcune funzionalità venivano compromesse e così sono ripassato alla
mia maschera normale.
Ora provo a fare come mi hai suggerito senza nessuna "variazione" e ti
faccio sapere, grazie.

T_A_O ha scritto:

Non va, mi si apre anche in questo caso l'imputbox che mi richiede
l'inserimento della data dal. Credo che abbandonerò il progetto
Vincenzo, pensavo fosse molto più semplice realizzare questa cosa ed
inoltre, anche se funzionasse, mi filtrerebbe solo la data di uscita e
non potrei impostare il filtro su ogni campo data, sulla scelta
dell'utente, come avrei voluto. Credo che mi creerò in excel delle
tabelle pivot importando i dati e raggruppando le date.
La soluzione che avevo in mente era più elastica (potevo calcolare
porzioni di mese, ultimi 10gg etc) ed immediata ma, visto che non ho
trovato nulla in giro, forse è irrealizzabile (nel senso da maschera a
maschera).
Ti ringrazio in ogni caso moltissimo, Marco.

Ti ringrazio in ogni caso moltissimo, Marco.
Prego


 ---------------------------------------------
Ciao Vincenzo. Spero tu non voglia credere che tengo in poca
considerazione i tuoi consigli, anzi, come quelli di tutti quelli che
intervengono per aiutare in questo NG, li considero preziosi,
soprattutto per uno, se non proprio alle primissime armi, diciamo con
un'enormità di strada davanti da fare. Il consiglio di trasporre tutto
su una struttura a schede mi era già stato dato e mi ero messo, come
ti dicevo, a provare a realizzarlo. Ne conservo ancora i tentativi. E'
un progetto che ho dovuto abbandonare perchè la mia maschera era ormai
così strutturata e funzionale nella sua ''arcaicita''' e mi era
costato cosi' tanto lavoro (e cosi' tanti consigli raccolti qui :) che
alla fine ho desistito, sia per i problemi tecnici sorti e che ora non
ricordo, sia per non incasinare il lavoro di chi inserisce (nella
maschera deve poter inserire anche chi non ha nessuna dimistichezza con
access o con il pc in generale) Il db serve per gestire una struttura
pubblica della quale non posso molto parlare (anzi, non posso affatto
pena il rischio di perdere il lavoro per la diffusione di dati
sensibili) che per renderti l'idea assomoglia in qualche modo ad
un'ospedale.
Fatta questa debita premessa, e sperando tu voglia ancora in qualche
modo aiutarmi, ti chiedo: ho abbandonato l'idea iniziale della mia
seconda maschera in ragione delle tue spiegazioni, quello che vorrei
ottenere sarebbe di mettere un piccolo pulsante accanto ai controlli
data che premuto avviasse una query parametrica che chiedesse data
inizio e fine (il problema dello spazio così, sarebbe risolto) e poi
filtrare la mia maschera in base al risultato della query. E' possibile
fare ciò?
Grazie ancora, ed in ogni caso,  per il tempo che hai voluto dedicarmi,
Marco.

Marco.
Vincenzo Turturro


 Ti ringrazio in ogni caso moltissimo, Marco.
Aggiornamento: dopo aver letto molti post, qui ed in altri gruppi e
molto trafficato, direi che il mio umore e' virato verso un'incredulo
entusiasmo, sembra che sia riuscito a trovare una soluzione a quasi
tutti i miei problemi. Ho impostato varie query per le varie date che
mi interessa filtrare
in questo modo:
SELECT [mia tabella].[Data uscita]
FROM [mia tabella]
WHERE ((([mia tabella].[Data uscita]) Between Nz([Data Uscita
Dal],DMin("[Data uscita]","[mia tabella]")) And Nz([Data Uscita
Al],DMax("[Data uscita]","[mia tabella]"))));
Ho creato delle macro, una per ogni data, con 'Apri Maschera' (la mia
maschera principale) e 'Imposta filtro' (la/e query create).
Ho creato un'altra maschera (Filtro date) popup con alcuni pulsanti di
comando; sul click di ciascuno ho messo il 'RunMacro' ed il 'Close'
(MascheraFiltro date) più un pulsante sulla mia maschera principale
per aprirla.
Sembra che tutto incredibilmente funzioni!!!!
Mi resta un'ultimo problema da risolvere: se nell'intervallo di date
scelto, non vi sono ricorrenze, la maschera principale appare nuda e
cruda, senza nessun controllo e/o record (ovviamente). Come posso far
si che, se nella query non vi sono records, non si applichi nessun
filtro nella maschera e vengano mostrati tutti i records?
Immagino che questo che ho utilizzato non sia il modo più elegante per
ottenere quello che mi prefiggevo e che sicuramente esisteva un modo
per ottenerlo solo da vba, ma io sono già molto contento di esserci
riuscito. Mi manca solo l'ultima spintarella per risolvere questo
problema...spero che Vincenzo o qualcun'altro mi voglia ancora aiutare.
un saluto, Marco.

un saluto, Marco.
Vincenzo Turturro


 ha scritto:

Grazie Vincenzo, ora provo subito.

 Al],DMax("[Data uscita]","[mia tabella]"))));
Ciao a tutti. Provando e riprovando mi sono accorto di ottenere dei
risultati strani da questa query. Es. se faccio una ricerca mettendo
nell'imputbox "dal" la data di domani e lasciando "al" vuoto (o
alternativamente ripetendo la stessa data), mi va a pescare gli usciti
di oggi quando, invece, non essendo previste uscite domani non dovrebbe
restiruirmi nessun risultato.
Cosa c'è di sbagliato?