Discussione:
query estrazione date
(troppo vecchio per rispondere)
kalamaro
2003-10-12 21:59:26 UTC
Permalink
Salve



Volevo sapere come fare una query che, partendo da un

intervallo di date (per esempio, dal 9 ottobre 2003

al 26 ottobre 2003) mi tira fuori tutte le date comprese

in questo intervallo che sono di martedì, di giovedì e di

sabato oppure di altri giorni.



Io ci sono riuscito in VBA ma, dovendo tirare fuori questi

dati per l'origine record di una maschera, deve essere

per forza un' istruzione SQL (o no?)



esempio per rendere + chiaro il concetto:



intervallo: dal 18 ottobre 2003 al 23 ottobre 2003

giorni da estrarre: lunedì e mercoledì



Intervallo: Query:



18/10/2003 (sabato)------!

19/10/2003 (domenica)----!

20/10/2003 (lunedì)-------------------------> 20/10/2003

21/10/2003 (martedì)-----!

22/10/2003 (mercoledì)----------------------> 22/10/2003

23/10/2003 (giovedì)-----!



Grazie dell'aiuto



Riccardo
Roberto da casa
2003-10-13 07:41:44 UTC
Permalink
Post by kalamaro
Salve
Volevo sapere come fare una query che, partendo da un
intervallo di date (per esempio, dal 9 ottobre 2003
al 26 ottobre 2003) mi tira fuori tutte le date comprese
in questo intervallo che sono di martedì, di giovedì e di
sabato oppure di altri giorni.
Io ci sono riuscito in VBA ma, dovendo tirare fuori questi
dati per l'origine record di una maschera, deve essere
per forza un' istruzione SQL (o no?)
Non necessariamente.
Post by kalamaro
intervallo: dal 18 ottobre 2003 al 23 ottobre 2003
giorni da estrarre: lunedì e mercoledì
18/10/2003 (sabato)------!
19/10/2003 (domenica)----!
20/10/2003 (lunedì)-------------------------> 20/10/2003
21/10/2003 (martedì)-----!
22/10/2003 (mercoledì)----------------------> 22/10/2003
23/10/2003 (giovedì)-----!
Grazie dell'aiuto
Riccardo
Se la tabella che contiene i dati si chiama Tabella1 ed il campo di tipo
Data/ora che contiene la data da selezionare si chiama MiaData, prova con
una query che abbia il seguente codice SQL:

SELECT Tabella1.*
FROM Tabella1
WHERE (((Tabella1.MiaData) Between #10/18/2003# And #10/23/2003#) AND
((Weekday([MiaData])) = 2 Or (Weekday([MiaData])) = 4));
--
Roberto

---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
kalamaro
2003-10-13 08:07:22 UTC
Permalink
Post by Roberto da casa
Post by kalamaro
Io ci sono riuscito in VBA ma, dovendo tirare fuori questi
dati per l'origine record di una maschera, deve essere
per forza un' istruzione SQL (o no?)
Non necessariamente.
cioe' ???
dall'help di Access leggo:
"L'impostazione della proprietà RecordSource può essere
un nome di tabella, un nome di query o un'istruzione SQL."
Post by Roberto da casa
Post by kalamaro
intervallo: dal 18 ottobre 2003 al 23 ottobre 2003
giorni da estrarre: lunedì e mercoledì
18/10/2003 (sabato)------!
19/10/2003 (domenica)----!
20/10/2003 (lunedì)-------------------------> 20/10/2003
21/10/2003 (martedì)-----!
22/10/2003 (mercoledì)----------------------> 22/10/2003
23/10/2003 (giovedì)-----!
Se la tabella che contiene i dati si chiama Tabella1 ed il campo di tipo
Data/ora che contiene la data da selezionare si chiama MiaData, prova con
SELECT Tabella1.*
FROM Tabella1
WHERE (((Tabella1.MiaData) Between #10/18/2003# And #10/23/2003#) AND
((Weekday([MiaData])) = 2 Or (Weekday([MiaData])) = 4));
Ho la tabella dei clienti che contiene il nome del cliente
e 5 campi tipo vero/falso per i giorni dal lunedi' al venerdi'

-nome cliente = testo
-lu = vero/falso
-ma = vero/falso
-me = vero/falso
-gio = vero/falso
-ve = vero/falso

cioe' i giorni che bisogna consegnare ai clienti: quindi se
il cliente coccobillo ha il lu, il me e il ve a 1, se dal form
ho 2 campi con le date "dal" e "al" al 18/10/2003 e 23/10/2003
nel form bisogna visualizzare:

20/10/2003: consegnare a coccobillo
22/20/2003: consegnare a coccobillo

Penso che non si possa fare in quanto se il recordsource deve essere
una tabella o query, per la selezione bisogna partire dalle date e non
dall' elenco clienti.

Mi sa che mi devo prima creare una tabella "al volo" con i giorni
compresi nelle due date, e poi fare la query confrontando le tabelle
"giorni" e "clienti"

comunque grz dell'aiuto

ciao

riccardo
Roberto da casa
2003-10-13 08:40:23 UTC
Permalink
Post by kalamaro
Post by Roberto da casa
Post by kalamaro
Io ci sono riuscito in VBA ma, dovendo tirare fuori questi
dati per l'origine record di una maschera, deve essere
per forza un' istruzione SQL (o no?)
Non necessariamente.
cioe' ???
"L'impostazione della proprietà RecordSource può essere
un nome di tabella, un nome di query o un'istruzione SQL."
Fermo restando quello che è scritto sull'help di Access, nessuno ti vieta di
mettere la tabella contenente tutti i dati come origine record della
maschera e poi, a fronte dell'evento "Su apertura" della maschera stessa
filtrare la maschera con una routine VBA agendo sulle proprietà Fiter e
FiterOn.
O sbaglio?
Post by kalamaro
Post by Roberto da casa
Post by kalamaro
intervallo: dal 18 ottobre 2003 al 23 ottobre 2003
giorni da estrarre: lunedì e mercoledì
18/10/2003 (sabato)------!
19/10/2003 (domenica)----!
20/10/2003 (lunedì)-------------------------> 20/10/2003
21/10/2003 (martedì)-----!
22/10/2003 (mercoledì)----------------------> 22/10/2003
23/10/2003 (giovedì)-----!
Se la tabella che contiene i dati si chiama Tabella1 ed il campo di tipo
Data/ora che contiene la data da selezionare si chiama MiaData, prova con
SELECT Tabella1.*
FROM Tabella1
WHERE (((Tabella1.MiaData) Between #10/18/2003# And #10/23/2003#) AND
((Weekday([MiaData])) = 2 Or (Weekday([MiaData])) = 4));
Ho la tabella dei clienti che contiene il nome del cliente
e 5 campi tipo vero/falso per i giorni dal lunedi' al venerdi'
-nome cliente = testo
-lu = vero/falso
-ma = vero/falso
-me = vero/falso
-gio = vero/falso
-ve = vero/falso
cioe' i giorni che bisogna consegnare ai clienti: quindi se
il cliente coccobillo ha il lu, il me e il ve a 1, se dal form
ho 2 campi con le date "dal" e "al" al 18/10/2003 e 23/10/2003
20/10/2003: consegnare a coccobillo
22/20/2003: consegnare a coccobillo
Dovresti spiegare meglio come è fatta questa maschera.
Ha una visualizzazione a Maschera singola o a Machere continue?
Deve visualizzare comunque i nominativi di tutti i clienti e per ognuno
indicare le date di consegna contenute in un periodo?
Insomma sii più preciso.
Post by kalamaro
Penso che non si possa fare in quanto se il recordsource deve essere
una tabella o query, per la selezione bisogna partire dalle date e non
dall' elenco clienti.
Precisa come deve essere fatta la maschera e poi vediamo il da farsi.
Post by kalamaro
Mi sa che mi devo prima creare una tabella "al volo" con i giorni
compresi nelle due date, e poi fare la query confrontando le tabelle
"giorni" e "clienti"
Non è deto.
Post by kalamaro
comunque grz dell'aiuto
ciao
riccardo
--
Roberto

---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
kalamaro
2003-10-13 09:15:27 UTC
Permalink
Post by Roberto da casa
Post by kalamaro
"L'impostazione della proprietà RecordSource può essere
un nome di tabella, un nome di query o un'istruzione SQL."
Fermo restando quello che è scritto sull'help di Access, nessuno ti vieta di
mettere la tabella contenente tutti i dati come origine record della
maschera e poi, a fronte dell'evento "Su apertura" della maschera stessa
filtrare la maschera con una routine VBA agendo sulle proprietà Fiter e
FiterOn.
O sbaglio?
no, non sbagli
Post by Roberto da casa
Dovresti spiegare meglio come è fatta questa maschera.
Ha una visualizzazione a Maschera singola o a Machere continue?
Deve visualizzare comunque i nominativi di tutti i clienti e per ognuno
indicare le date di consegna contenute in un periodo?
Insomma sii più preciso.
La maschera e' in visualizzazione maschere continue.
Deve visualizzare SOLO le date con delle consegne, ad esempio

25-10-2003 consegnare a coccobillo
25-10-2003 consegnare a topolino
25-10-2003 consegnare a yoghi
26-10-2003 consegnare a coccobillo
26-10-2003 consegnare a topolino
28-10-2003 consegnare a coccobillo
28-10-2003 consegnare a yoghi
28-10-2003 consegnare a magilla
29-10-2003 consegnare a topolino

le date senza consegne non devono essere visualizzate

ciao

riccardo
Roberto da casa
2003-10-13 12:38:49 UTC
Permalink
Post by kalamaro
Post by Roberto da casa
Post by kalamaro
"L'impostazione della proprietà RecordSource può essere
un nome di tabella, un nome di query o un'istruzione SQL."
Fermo restando quello che è scritto sull'help di Access, nessuno ti
vieta
Post by kalamaro
di
Post by Roberto da casa
mettere la tabella contenente tutti i dati come origine record della
maschera e poi, a fronte dell'evento "Su apertura" della maschera stessa
filtrare la maschera con una routine VBA agendo sulle proprietà Fiter e
FiterOn.
O sbaglio?
no, non sbagli
Post by Roberto da casa
Dovresti spiegare meglio come è fatta questa maschera.
Ha una visualizzazione a Maschera singola o a Machere continue?
Deve visualizzare comunque i nominativi di tutti i clienti e per ognuno
indicare le date di consegna contenute in un periodo?
Insomma sii più preciso.
La maschera e' in visualizzazione maschere continue.
Deve visualizzare SOLO le date con delle consegne, ad esempio
25-10-2003 consegnare a coccobillo
25-10-2003 consegnare a topolino
25-10-2003 consegnare a yoghi
26-10-2003 consegnare a coccobillo
26-10-2003 consegnare a topolino
28-10-2003 consegnare a coccobillo
28-10-2003 consegnare a yoghi
28-10-2003 consegnare a magilla
29-10-2003 consegnare a topolino
le date senza consegne non devono essere visualizzate
Se questa è la tua esigenza, a mio avviso la cosa migliore e più flessibile
da gestire è quella di creare una tabella d'appoggio nella quale registrare
un record per ogni nominativo al quale in una determinata data si può
consegnare la merce, quindi visualizzare in una maschera continua tale
tabella.
Se il periodo fosse però composto da un numero massimo definito di giornate
(ad esempio al massimo 5 giornate), si potrebbe fare a meno di creare e
popolare la tabella di appoggio. In una maschera non associata bisognerebbe
inserire cinque caselle di testo non associate nelle quali visualizzare le
giornate di consegna (max 5); ad ognuna di queste caselle combinate
affiancare una casella di testo non associata più grande nella quale
inserire, scanditi da una virgola, i nominativi dei clienti per i quali è
possibile consegnare la merce in quel giorno: di fatto, con un ciclo For ...
Next, la tabella clienti andrebbe spazzolata tante volte quante sono le date
di consegna contenute nel periodo (max 5 giornate) per rilevare, ogni volta,
i nominativi ai quali si può consegnare nel giorno della settimana che
coincide con il giorno della settimana di quella data.
Post by kalamaro
ciao
riccardo
--
Roberto

---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
kalamaro
2003-10-13 13:10:08 UTC
Permalink
Post by Roberto da casa
Se questa è la tua esigenza, a mio avviso la cosa migliore e più flessibile
da gestire è quella di creare una tabella d'appoggio nella quale registrare
un record per ogni nominativo al quale in una determinata data si può
consegnare la merce, quindi visualizzare in una maschera continua tale
tabella.
Se il periodo fosse però composto da un numero massimo definito di giornate
(ad esempio al massimo 5 giornate), si potrebbe fare a meno di creare e
popolare la tabella di appoggio. In una maschera non associata
bisognerebbe
Post by Roberto da casa
inserire cinque caselle di testo non associate nelle quali visualizzare le
giornate di consegna (max 5); ad ognuna di queste caselle combinate
affiancare una casella di testo non associata più grande nella quale
inserire, scanditi da una virgola, i nominativi dei clienti per i quali è
possibile consegnare la merce in quel giorno: di fatto, con un ciclo For ...
Next, la tabella clienti andrebbe spazzolata tante volte quante sono le date
di consegna contenute nel periodo (max 5 giornate) per rilevare, ogni volta,
i nominativi ai quali si può consegnare nel giorno della settimana che
coincide con il giorno della settimana di quella data.
Purtoppo il lasso di tempo puo' essere 1 giorno come 1 anno e l'unico modo
abbastanza "veloce" che sono riuscito ad attuare (che peraltro funziona
benissimo) e' stato quello di generare al volo una tabella con un campo
data e popolarlo con un loop dei giorni compresi tra la data "dal" e
la data "al", dopodiche' con una query confronto il weekday di ogni giorno
con la casella vero/falso dei giorni della settimana di consegna di
ogni cliente.

Come al solito le cose si possono fare in 1000 modi, ognuno piu' (il mio :)
o meno cervellotico..... grazie 10000 del tuo aiuto e buona giornata.

riccardo

Loading...