Newsgroup: it.comp.appl.access
Titolo: [?] usare BETWEEN su 2 giorni... Access lo permette ?

Ciao a tutti !!
...per oggi le domande non sono finite.. :-))
Problema:
Devo recuperare , da una tabella, i dati di alcuni dipendenti che lavorano
su 3 turni giornalieri.
L'utente sceglie il turno da una casella combinata.
Il problema nasce quando scelgo il turno notturno, cioé dalle  22:00:00 alle
05:30:00  , quindi su 2 giorni.
Pensavo di potermi salvare con un semplice  BETWEEN #22:00:00# AND...
ecc..ecc...   invece pare che non funzioni, se per caso un dato appartiene
al turno delle 09:30 (Mattino) , la select con Between me lo mostra sia nel
turno esatto, sia in quello precedente... (presumo che between non sia
unidirezionale ).
Qualcuno che magari ha già avuto un problema simile.. potrebbe aiutarmi a
trovare un rimedio ?
Grazie 2000 !!!!
DaVe
Access97 SR1 , Win98
(brutta cosa essere un principiante... )

unidirezionale ).
c'e' un problema di fondo.  tu immagazzini solo l'ora.  odovresti
immagazzinare anche la data.
--
il sito comune di it.comp.appl.access:
http://members.xoom.it/it_db_access/

Vediamo se ho capito!
Un dipendente lavora dalle 12.30 alle 22.00 : non ci sono problemi!
Un dipendente lavora dalle 22.00 alle 05.00
Con il between avrai sicuramente problemi anche ad esempio nel calcolare il
numero di ore che lavora questa persona in quanto con un datediff ti viene
calcolata
la differenza non tra 22.00-05.00  (..=7 ore) ma la differenza tra
05.00-22.00 (..=17) magari in valore negativo.
Tempo fa ho avuto anch'io un problema simile
Fammi pensare a cosa ho architettato e poi te lo dico!
Ciao

 wrote in message
8caop0$sdn$1...@lacerta.tiscalinet.it...


Puoi fare una furbata
Consideriamo i due parametri OraI e OraF  (inizio e fine)
finche OraI è < di OraF cioè orari che non superano la mezzanotte puoi
gestirlo normalmente
quando OraF a superato la mezza puoi crearti due variabili temporanea
retrodatando gli orari
CIOE': esempio 22.00-02.00
da un punto di vista logico l' orario 22.00 e inferiore a 02.00; in realtà
viene interpretato come 02.00-22.00 per cui ti vengono fuori risultati
errati
se crei due nuove variabili cioè TmpOraI e TmpOraF e gli assegni i valori:
TmpOraF=23.00 oppure #11:00:00 PM#
TmpOraI=TmpOraI-TmpOraF-1 oppure TmpOraI=TmpOraI-TmpOraF-#1:00:00 AM#
ottieni due valori dove con una semplice differenza (DATEDIFF di
TmpOraF,TmpOraI) ottieni il valore delle ore lavorate
pensandoci un po puoi risolvere il problema del dipendente che ha timbrato
in turno che è a cavallo della mezzanotte.
Dimenticavo: condizione fondamentale perche questo sistema funzioni e che un
dipendente non lavori piu' di 24 ore in un giorno....!!!!!!!

 --
Ciao lbo !
uhmm giusto...  !!
Ok ma come faccio a inserire anche la data nella query ??   cosi' va bene :
BETWEEN #22/12/98,22:00:00# AND....    ???
si fa cosi ?  scusa ma non ne ho idea :-) sono un principiante...
Grazie mille ! DaVe

BETWEEN #22/12/98,22:00:00# AND....    ???
le date in sql sono sempre un problema.  e' un tema ricorrente sul ng
anche in questi giorni.  mi pare che ci sia qualcosa anche sul sito
comune, sul quale ti invito a cercare.
comunque considera questo: sql lo hanno "inventato" gli americani, i
quali scrivono le date cosi': mese, giorno, anno.  anche sql si
aspetta che le date gli siano fornite in questa maniera.
puoi anche passargliele in un altro formato, che e' quello che io
preferisco e che ti mette al riparo da ogni possibile ambiguita':
yyyy/mm/dd, ossia anno in quattro cifre, barra, mese in due cifre,
barra, giorno in due cifre.  ottieni cio' utilizzando la funzione
format della quale ti invito a leggere l'help.
credo che l'ora la puoi concatenare con un solo spazio, senza virgola.
occhio se mai dovessi aver bisogno di "sommare" le ore.  ad esempio,
tu potresti aspettarti che se uno in un mese ha lavorato otto ore al
giorno per venti giorni non ci voglia niente a moltiplicare otto per
venti ed ottenere le 160 ore che gli dovranno essere retribuite.
cosi' non e'.  il tipo data/ora di access serve solo ad immagazzinare
delle date assolute, ovvero la distanza su una retta dal tempo zero, e
non e' in grado di sommare i tempi.  la data zero di access e' il
primo gennaio dell'anno 100 dopo Cristo, quindi per access 160 sono
160 ore a partire da quel "tempo zero", e cioe' il pomeriggio del 6
gennaio dell'anno 100.
se devi contare intervalli di tempo ti conviene agire su tipi dati
numerici.


 >> immagazzinare anche la data.
Ciao a tutti e inanzitutto grazie per i consigli !!!
Scusa se ho tagliato tutto il tuo reply lbo :-)
Ok, ho risolto tutto aggiungendo anche la data al filtro di ricerca, come mi
ha consigliato qualcuno (acc.. non ricordo il nome).
Gli dico che se il turno che si vuole mostrare é quello incriminato (ovvero
quello a cavallo tra 2 giorni) , allora la data di inizio resta quella
attuale mentre alla data di fine turno viene sommato 1. Funziona alla grande
!!
Ancora grazie mille !!
DaVe

ho conosciuto ha lavorato 25 ore in un giorno.
battuta, errore, il tizio lavorava in due sedi contemporaneamente o
cosa?  mi interessa...


ricominciato facendo il secondo turno.
poi gli han dovuto sparare perche' se no non si fermava piu'...  :-)
e' fantastico, non si finisce mai di imparare.
