Newsgroup: it.comp.appl.access
Titolo: ricerca su due date in controlli diversi

Un cordiale saluto a tutti.
Ho office xp su win xp.
Vorrei trovare la soluzione a questo problema:
Ho i seguenti controlli:
- nome
- cognome
- data inizio
- data fine
- totale assenze
- Se inserisco che Pinco Pallino č assente dal 01/01/2003 al 20/01/2003
ottengo 20 giorni di assenza e cosě via. - ok
- Con una query, filtro i periodi di assenza che mi interessano, perň se
chiedo le assenze dal 10/01/2003 al 20/01/2003 non mi restituisce alcun
risultato perchč la macchina  cerca nel campo data inizio la data 10/01/2003
e naturalmente non la trova essendo intermedia al periodo inserito.
Sarei gratissimo a quanti vorranno aiutarmi
Spero di essere stato chiaro nell'esposizione.
Ciao e grazie a tutti di esserci
Antonio

 ha scritto nel messaggio
news:RYrba.41701$pG1.1...@news1.tin.it...

prova con  >= between [inizio periodo] and [fine periodo]
poi non si capisce se chiedi chi č assente in quel periodo oppure quanti
giorni di assenza ha computato in quel periodo.
Facci sapere
--
-----------------------------------------------------------
Mar&mar
-----------------------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
-----------------------------------------------------------

 ha scritto nel messaggio
news:RYrba.41701$pG1.1...@news1.tin.it...

ooopssssss minore si scrive "<" pardon

 e naturalmente non la trova essendo intermedia al periodo inserito.
[...]
    Fatti una tabella calendario. Poi una query con le due tabelle, con
criterio sul campo data della tabella calendario between [data inizio]
and [data fine]. Esempi dovresti trovarli su google.
    (Facci sapere se ed eventualmente come hai risolto. Grazie.)
--
Ciao :o)
Maurizio
--------
?SPQR(C)
 X
--------


Grazie, amici.
rispondo a Mar&mar dicendo che mi occorre trovare quanti
giorni di assenza ha computato in quel periodo, però se io inserisco una
data x e una data y, nella ricerca se dò una data di inizio intermedia a x e
y la macchina non la trova e si impalla.
All'amico Borrelli chiedo se può spiegarmi come si fa una tabella
calendario.
Grazie ancora
Antonio

 calendario.
    Vedi se qui trovi qualcosa (tutto su una riga):
http://groups.google.com/groups?as_q=calendario&ie=UTF-8&oe=UTF-8&as_ugr
oup=it.comp.appl.access&as_uauthors=maurizio%20borrelli&lr=&num=100&hl=i
t


 Antonio
Se la tabella che contiene i dati si chiama Tabella1.
Se nella query vuoi visualizzare solo le persone assenti nel periodo.
Se nel calcolo dei giorni di assenza la data di inizio assenza non deve
essere minore della data di inizio periodo e la data di fine assenza non
deve essere maggiore della data di fine periodo (e quindi tra l'altro i
giorni di assenza non saranno mai maggiori dei giorni del periodo).
Creati una query che abbia il seguente codice SQL:
SELECT Tabella1.*, (CDate(IIf([Data Fine]<[Digita data Fine Periodo :],[Data
Fine],[Digita data Fine Periodo :]))-CDate(IIf([Data Inizio]>[Digita data
Inizio Periodo :],[Data Inizio],[Digita data Inizio Periodo :])))+1 AS
Giorni
FROM Tabella1
WHERE (((IIf([Data Inizio]<=[Digita data Inizio Periodo :] And [Data
Fine]>=[Digita data Inizio Periodo :],1,IIf([Data Inizio]<=[Digita data Fine
Periodo :] And [Data Fine]>=[Digita data Fine Periodo :],1,0)))=1));
Stai attento che la query ti chiederà di digitare prima la data di fine
periodo e poi la data di inizio periodo.
--
Roberto


 Grazie amici, studierò sodo!!!!
ciao

 ciao
Fermo restando che devi studiare, la soluzione che ti ho postato ti ha
funzionato?


 Roberto
Ahimč, no:
ho fatto delle prove ma non va.
La mia query č composta dai campi: cognome - nome - data inizio - data fine
- nel criterio del cognome ho: [digita il cognome]
- nel criterio del nome ho: Like nz([digita il nome se ci sono omonimi];"*")
.........
chiedo umilmente: il codice SQL che mi hai mandato dove devo scriverlo???
ti prego non strapazzarmi troppo :O((

 ha scritto nel messaggio
news:EOAca.86744$zo2.2...@news2.tin.it...

Se devi effettuare il filtro di selezione anche sul cognome e sul nome il
codice SQL della query che ti serve č il seguente:
SELECT Tabella1.*, (CDate(IIf([DataFine] < [Fine Periodo :], [DataFine],
[Fine Periodo :])) - CDate(IIf([DataInizio] > [Inizio Periodo
:],[DataInizio], [Inizio Periodo :]))) + 1 AS Giorni
FROM Tabella1
WHERE (((Tabella1.Cognome) = [digita il cognome]) AND ((Tabella1.Nome) Like
nz([digita il nome se ci sono omonimi], "*")) AND ((IIf([DataInizio] <=
[Inizio Periodo :] And [DataFine] >= [Inizio Periodo :], 1, IIf([DataInizio]
<= [Fine Periodo :] And [DataFine] >= [Fine Periodo :], 1, 0))) = 1));
Questo codice SQL non devi inserirlo da nessuna parte: č il codice SQL
completo della query  con cui devi filtrare i periodi di assenza che ti
interessano.
Come tu hai chiesto i record verranno filtrati in base al cognome,
opzionalmente il nome ed alle date di inizio e fine periodo: questi quattro
parametri ti verranno richiesti con altrettante finestre di richiesta
parametri.
Facci sapere se funziona.


 Roberto
~~~~~~~
Grazie Roberto, la query funziona, ma non come mi necessita:
cerco di spiegarmi meglio:
- Pinco Pallino è assente dal 01/01/2003 al 30/01/2003 quindi per 30gg.
- se voglio sapere quanti gg di assenza ha fatto dal 10/01/2003 al
30/01/2003 (nel contratto di lavoro il calcolo si fa su 3 anni indietro -
ecco perchè parzializzare i periodi), la query mi dice che il Pinco Pallino
è assente dal 01/01/2003 al 30/01/2003 per 30gg. e non dal 10/01/2003 per
20gg.(come servirebbe che dicesse) :O((
Scusa se rompo tanto
Ciao, Antonio

 Ciao, Antonio
A parte che dal 10/01/2003 al 30/01/2003 i giorni di assenza sono 21 e non
20, ma tu la query che ti ho postato l'hai provata?
Penso proprio di no, in quanto io l'ho fatto ora per scrupolo e a me
funziona benissimo: se inserisco in Tabella1 un Pinco Pallino che č stato
assente dal 1/1/2003 al 30/1/2003 e gli dico che il periodo di osservazione
va dal 10/1/2003 al 30/1/2003 la query mi calcola un assenza di 21 giorni
come hai chiesto tu.
Ho paura che tu hai fatto un brutale copia/incolla del codice che ti ho
postato e i troncamenti effettuati dalle andate a capo troncate di Outlook
Express ti abbiano creato problemi.
Prova cosě:
SELECT Tabella1.*, (CDate (IIf([DataFine] < [Fine Periodo:], [DataFine],
[Fine Periodo:])) - CDate(IIf([DataInizio] > [Inizio Periodo:],[DataInizio],
[Inizio Periodo:])))+1 AS Giorni
FROM Tabella1
WHERE (((Tabella1.Cognome) = [digita il cognome]) AND ((Tabella1.Nome) Like
Nz([digita il nome se ci sono omonimi], "*")) AND ((IIf([DataInizio] <=
[Inizio Periodo:] And [DataFine] >= [Inizio Periodo:], 1, IIf([DataInizio]
<= [Fine Periodo:] And [DataFine] >= [Fine Periodo:], 1, 0)))=1));
--



CUT
       SONO UN PIRLA
Grazie di tutto sei in gambissima
Anto

 CUT
........Segue
Ho notato un'anomalia :O(  se c'è un solo periodo inserito, allora ok; ma se
Pinco Pallino ha altre assenze in febbraio.....
allora mi viene visualizzato solo il primo periodo di gennaio dove sbaglio??
Scuuuuuuuuusa, ma ormai mi hai adottato!
 Anto

  Anto
Non sbagli tu, c'č un errore nel codice SQL.
Prova cosě:
SELECT Tabella1.*, (CDate(IIf([DataFine] < [Fine Periodo:], [DataFine],
[Fine Periodo:])) - CDate(IIf([DataInizio] > [Inizio Periodo:],
[DataInizio], [Inizio Periodo:]))) + 1 AS Giorni
FROM Tabella1
WHERE (((IIf([DataInizio] <= [Inizio Periodo:] And [DataFine] >=
[Inizio Periodo:], 1, IIf([DataInizio] <= [Fine Periodo:] And [DataFine] >=
[Inizio Periodo:], 1, 0))) = 1) AND ((Tabella1.Cognome) =
[digita il cognome]) AND ((Tabella1.Nome) Like
Nz([digita il nome se ci sono omonimi], "*")));


 ha scritto nel messaggio
news:2GZca.17236$7y3.5...@twister1.libero.it...

Grazie maestro; ma che dico, maestro ESTRO.
Sei un MAGO, (quando sarň piů grande, potrň chiederti di aiutarmi a
risolvere un altro problema?)
ciao
Anto

 Anto


 Roberto
Grazie veramente, se non fosse per la gente che vive con passione che mondo
sarebbe!
Spero di ricambiare, ma credo che sarà dura!
Ant
