Newsgroup: it.comp.appl.access
Titolo: Aiuto per query

Ho provato in tutti i modi, ma non ci riesco! Un modo perň ci dev'essere, e
puň darsi che sia pure piů facile di quanto pensi!
Ho una tabella con tutte le assenze del personale: riposi settimanali,
riposi festivi, congedi ordinari, straordinari, malattie, ecc.
Vorrei creare una query che selezionasse tutte le assenze in un determinato
periodo. Faccio un esempio cosě mi spiego meglio:
il dipendente Tizio ha nel periodo richiesto 3 record:
- uno per un periodo di malattia dal 1 al 15 gennaio;
- uno per un riposo settimanale il 6 gennaio;
- uno per un altro riposo settimanale il 12 gennaio.
(Da notare che il 6 e il 12 gennaio sono "dentro" il periodo di malattia)
La mia query dovrebbe pescare soltanto il record della malattia.
Quel che segue č ciň che sono riuscito a fare:
Nei criteri del campo id (contatore) della tabella ho iserito questa
limitazione ("rs", "rf" e "m" sono rispettivamente riposo settimanale e
ripso festivo e malattia):
Not In (Select T1.Id from assenzetabella As T1 where ((T1.Tipoassenza = "rs"
and T1.tipoassenza = "rf") And T1.id IN (Select T2.id from assenzetabella as
T2 Where T2.idagente = T1.idagente And T2.tipoassenza = "m" and
T2.datainizioassenza <=T1.datainizioassenza and
T2.datafineassenza>=T1.datainizioassenza)))
Per favore "strigatemi", grazie.

 - uno per un periodo di malattia dal 1 al 15 gennaio;
E cosa dovrebbe succedere se la stessa persona risultasse malata anche dal
10 al 20 gennaio (lo so, č illogico, ma anche prendere riposo durante una
malattia lo č, per cui presumo che non ci sia un gran controllo preventivo
nell'inserimento dei dati)?
Alessandro

 Ti ringrazio della considerazione e mi spiego meglio
La mia query ha questi campi:
Id (contatore)
IdAgente (identificativo dipendente)
datainizioassenza
datafineassenza
tipoassenza
La selezione la faccio con la richiesta dei parametri nei campi
"datainizioassenza" e "datafineassenza"; per quanto riguarda la
"datafineassenza", con una condizione IIf  faccio in modo che in ogni caso
se il parametro indicato č ricompreso nel periodo di malattia consideri la
data finale anche se superiore
Per quanto riguarda le date dei riposi settimanali, queste compaiono perché
sono preimpostate all'inizio dell'anno, ed essendo di un giorno riportano la
stessa data sia nella "datainizioassenza" che nella "datafineassenza".
Spero di essere stato piů chiaro.
Ciao grazie di nuovo.

Agos,
l'unico modo che mi è venuto in mente per risolvere il tuo problema è
tramite una funzione. Non è detto che sia l'unico in assoluto, ovviamente,
ma io non saprei come altro fare.
Io tenterei una cosa del genere:
1) crei una query di questo tipo
SELECT *,
CHECK_ASSENZA([ID],[IDAGENTE],[datainizioassenza],[datafineassenza]) AS
AssOK
FROM assenzetabella;
2) crei una funzione in un modulo simile a questa:
Function Check_Assenza(idAss, idAg, DatIni, DatFin) As Boolean
    Dim db As Database, rst As Recordset
    Set db = CurrentDb
    Set rst = db.OpenRecordset("SELECT * FROM assenzetabella WHERE id <> " &
idAss & " and IDAgente=" & idAg & ";")
    rst.MoveFirst
    While Not rst.EOF
...
...
...
        rst.MoveNext
    Wend
End Function
In pratica la funzione verrà richiamata per ciascun record e leggerà nella
tabella tutte le assenze con ID diverso da quello corrente e con IDAgente
uguale a quello corrente e tornerà un valore Vero/Falso in base ai criteri
che tu decidi. Al posto dei puntini dovrai scrivere del codice per
determinare se il record corrente della query è "valido" oppure no
(confrontando i suoi valori con quelli degli altri records). Probabilmente
sarà anche necessario "passare" a questa funzione anche i criteri di
selezione.
Insomma, l'idea è sicuramente grezza e dovrai lavorarci un po' su, ma spero
che ti aiuti ad ottenere il risultato desiderato.
Buona fortuna!
Alessandro