Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Selezionare dati con una query, su 2 giorni.

Ciao a tutti !!!
Problema :
Devo visualizzare dei dati su dei dipendenti , i dati stanno su un .mdb
Per selezionare i dati mi baso su un filtro che a sua volta si basa su 3
turni  (Mattino,Pomeriggio,Notte).
Per impostare il filtro e la ricerca uso una query SQL, nella quale ho
inserito una stringa tipo :
".......WHERE Turno_id  BETWEEN #22:00:00# AND #05:30:00# ".
Ok, allora... il problema appare quando devo selezionare i dati di un tal
dipendente che lavora nel turno di Notte , che va dalle 22:00 alle 05:30.
Cioé in pratica su 2 giorni.
Se per dire un certo dipendente lavora alle 09:30 , quando io filtro il
turno "Notte" mi appare ugualmente questo dipendente... sembra che Between
non sia unidirezionale quindi...
accidenti... e come faccio a dirgli di guardare solo "avanti" e non
all'indietro ?
Qualcuno magari ha gia' avuto un problema simile e sa darmi un consiglio ???
aiuto...!!
Grazie mille !!!
DaVe

 all'indietro ?
non riesco a capire se hai un'unica tabella con le fasce orarie, o come
e'/sono strutturate.
io credo tenderei a mettere turno_id come campo non data ma con valore 0, 1,
2, per i tre turni, e a selezionare piu' semplicemente
    where turno_id = 3
o, se non puoi rivoluzionare la tabella, aggiungerei cmq un campo simile per
ogni riga, dandogli il valore giusto o nel momento in cui compili la riga o
(peggio) con un batch che si passa la tabella.
ciao, a.


[CUT]


  boh... devo provare se funziona...
La data la devi inserire nel formato "americano" col mese prima del giorno
ed uno spazio fra giorno ed orario, cosi':
#4/13/2000 22.00.00#
Poi potrebbe esserti utile questo esempio che ho gia' postato ieri in
risposta ad un quesito analogo (differenza orari):
Dim dateBegin As Date
Dim dateEnd   As Date
Let dateBegin = "22.00.00"
Let dateEnd = "06.00.00"
Debug.Print _
  Format$( _
      (dateEnd - 24 * (dateBegin > dateEnd)) - dateBegin _
    , "Long Time")
Quindi il tuo problema del:
".......WHERE Turno_id  BETWEEN #22:00:00# AND #05:30:00# ".
forse potrebbe essere risolto cosi':
Dim dateBegin As Date
Dim dateEnd   As Date
Let dateBegin = #22.00.00#
Let dateEnd = #05.30.00#
Let dateEnd = dateEnd - 24 * (dateBegin > dateEnd)
  "SELECT Turno_id - 24 * (#" & dateBegin & "# > Turno_id) AS TurnoID " _
& ... _
& " WHERE" _
& " Turno_id - 24 * (#" & dateBegin & "# > Turno_id)" _
& " Between #" & dateBegin & "# And #" & dateEnd & "#"
Occhio che non ho ne' riletto ne' testato quello che ho scritto!
--
Ciao.
Maurizio

 ".......WHERE Turno_id  BETWEEN #22:00:00# AND #05:30:00# ".
Sono riuscito a liberarmi un attimo ed ho revisionato la bozza che ti ho
mandato poco fa. Mi sembra che cosi' possa andare. Fammi sapere se ci sono
problemi.
Option Explicit
'PARAMETERS OraInizio DateTime, OraFine DateTime;
'SELECT Tabella1.Ora
'From Tabella1
'WHERE (((24+[Ora]-24*([OraInizio]>[Ora]))
' Between 24+[OraInizio]
' And 24+[OraFine]-24*([OraInizio]>[OraFine])));
'
Sub Main()
Dim db
Dim rs
Dim s         As String
Dim dateBegin As Date
Dim dateEnd   As Date
  Let dateBegin = #10:00:00 PM#
  Let dateEnd = #6:00:00 AM#
  Let dateEnd = 24 + dateEnd - 24 * (dateBegin > dateEnd)
  Let s = "SELECT"
  Let s = s & " [Ora]"
  Let s = s & " FROM Tabella1"
  Let s = s & " WHERE 24+[Ora]-24*(#" & dateBegin & "#>[Ora])"
  Let s = s & " Between 24+#" & dateBegin & "#"
  Let s = s & " And #" & dateEnd & "#"
  Let s = s & ";"
  Set db _
    = DAO.DBEngine.OpenDatabase( _
      "c:\progetti\mso8\ac\db1.mdb")
  With db
    Set rs = .OpenRecordset(s, dbOpenSnapshot)
    With rs
      If .BOF And .EOF Then
      Else
        .MoveLast
        Call MsgBox(.RecordCount)
      End If
      .Close
    End With
    Set rs = Nothing
    .Close
  End With
  Set db = Nothing
End Sub
--
Ciao.
Maurizio