Differenza formato orario con ciclo DAO

di il
12 risposte

Differenza formato orario con ciclo DAO

Salve a tutti. Buona domenica. Vi chiedo un aiuto perchè non riesco proprio a capire che succedde!!
Devo creare un calendario didattico ed ho utilizzato un ciclo DAO inserendo in una maschera:
Corso, DataInizio, DataFine, OraInizio, OraFine.
Supponiamo di vole creare un calendario da giorno 12/09/2018 a giorno 13/09/2018 dalle 8:00 alle 20:00
Viene di seguito riportato il codice:
Dim settimana As Variant
Dim Corso As Integer
Dim Sede As Integer
Dim OraInizio As Date
Dim OraFine As Date
Dim DataInizio As Date
Dim DataFine As Date
Dim i As Integer
Dim j As Integer
Dim intRisposta As String
Dim IDCalendario As Variant
Dim Massimo As Variant
Dim rs As DAO.Recordset
Dim db As DAO.Database
Set db = CurrentDb
Set rs = db.OpenRecordset("Calendario", dbOpenDynaset)


DataInizio = Me.Testo444
DataFine = Me.Testo446
OraInizio = Me.Testo448
OraFine = Me.Testo450
j = Hour([OraFine] - [OraInizio])
Sede = Me.Sede
Corso = Me.Corso

                                                    If rs.EOF Then ' Crea un record se la tabella è vuota
                                                                                        rs.AddNew
                                                                                        rs!Data = #1/1/1900#
                                                                                        rs.Update
                                                     
                                                    End If
                                                    rs.Close
                                                    Set rs = Nothing


Set rs = db.OpenRecordset("Calendario", dbOpenDynaset)


intRisposta = MsgBox("Attenzione hai deciso di creare il calendario. Sei sicuro?", vbYesNo + vbExclamation, "")
            If intRisposta = vbYes Then
Do Until rs.EOF
settimana = WeekdayName(Weekday([DataInizio], 2))
          
            
            If DataInizio <= DataFine Then
                                    i = 0
                                    For i = 1 To j
                                    rs.AddNew
                                    rs!Data = DataInizio
                                    rs!Giorno = settimana
                                    rs!OraInizio = OraInizio
                                    rs!OraFine = OraInizio + #1:00:00 AM#
                                    rs!IDMateria = Null
                                    rs!IDDocente = Null
                                    rs!IDCorso = Corso
                                    rs!NSede = Sede
                                    
                                    OraInizio = OraInizio + #1:00:00 AM#
                                    rs.Update
                                    Next
                                    
             OraInizio = Me.Testo448
            DataInizio = DataInizio + 1
      Else
'Call EliminaDuplicati
   Me.Requery
     MsgBox "Calendario creato correttamente", vbInformation, ""
         
      Exit Sub
      End If
      rs.MoveNext
Loop
 rs.Close
Set rs = Nothing
DBCOrrente.Close

Exit Sub

Else: Exit Sub
End If
Il Calendario viene creato correttamente ma appeno apro la tabella "Calendario" succede una cosa strana nel campo OraInizio perchè non tutti hanno lo stesso formato. esempio:
8:00
9:00
10:00
11:00:00
12:00
13:00
14:00:00
15:00:00
16:00:00
17:00:00
18:00:00
19:00:00

Per quale motivo? Grazie sempre per il vostro prezioso apporto

12 Risposte

  • Re: Differenza formato orario con ciclo DAO

    A parte la confusione, ma come apri la tabella e come vedi i dati? Hai impostato un formato di visualizzazione per quel campo?
  • Re: Differenza formato orario con ciclo DAO

    Ciao Oregon, la tabella la apro manualmente ed il formato nel campo OraInizio e OraFine è Data/Ora con Ora estesa. Quello che non capisco è che una volta scelto il formato succede che in alcuni record li vede in formato 00:00:00 ed altri in formato 00:00
  • Re: Differenza formato orario con ciclo DAO

    Ti consiglio, per prima cosa di impiegare "Option Explicit" ed effettuare una compilazione del codice; in merito al codice considera che utilizzi OraInizio ed OraFine che sono delle Date (quindi comprensive della data e dell'orario) il cui dato presenti solo come orario (e sarebbe da vedere come) inoltre nel ciclo vai a controllare specificamente la DataInizio e DataFine; infine ha poco senso iniziare il primo record con la data #1/1/1900#.
    Per quanto sopra è da controllare la logica presentata nel codice.
  • Re: Differenza formato orario con ciclo DAO

    willy55 ha scritto:


    Ti consiglio, per prima cosa di impiegare "Option Explicit" ed effettuare una compilazione del codice; in merito al codice considera che utilizzi OraInizio ed OraFine che sono delle Date (quindi comprensive della data e dell'orario) il cui dato presenti solo come orario (e sarebbe da vedere come) inoltre nel ciclo vai a controllare specificamente la DataInizio e DataFine; infine ha poco senso iniziare il primo record con la data #1/1/1900#.
    Per quanto sopra è da controllare la logica presentata nel codice.
    Ciao Willy grazie per la tua risposta. Come posso assegnare alle variabili OraInizio e OraFine gli orari senza la data?
    Grazie
  • Re: Differenza formato orario con ciclo DAO

    Se i campi sono nel formato Data ed Ora (corrispondenti ad un numero) come nell'esempio:
    
    OraInizio = #11/4/2018 1:00:00 AM# 
    OraFine = #11/4/2018 10:00:00 PM# 
    
    L'incremento di una ora rispetto all'ora di inizio sarà:
    
    OraInizio = OraInizio + #1:00:00 AM#
    
    Pertanto, avrai la identificazione dell'intervallo (con la data giornaliera e l'orario per entrambi i valori di Inizio e fine) e non sarà necessario un ulteriore campo (Data, DataInizio, DataFine) in quanto sarà solo una questione di presentazione del dato (che potrai estrapolare con le funzioni specifiche).
  • Re: Differenza formato orario con ciclo DAO

    willy55 ha scritto:


    Se i campi sono nel formato Data ed Ora (corrispondenti ad un numero) come nell'esempio:
    
    OraInizio = #11/4/2018 1:00:00 AM# 
    OraFine = #11/4/2018 10:00:00 PM# 
    
    L'incremento di una ora rispetto all'ora di inizio sarà:
    
    OraInizio = OraInizio + #1:00:00 AM#
    
    Pertanto, avrai la identificazione dell'intervallo (con la data giornaliera e l'orario per entrambi i valori di Inizio e fine) e non sarà necessario un ulteriore campo (Data, DataInizio, DataFine) in quanto sarà solo una questione di presentazione del dato (che potrai estrapolare con le funzioni specifiche).
    Oppure, ed io lo preferisco:
    
    OraInizio = DateAdd("h",1,OraInizio)
  • Re: Differenza formato orario con ciclo DAO

    Grazie a tutti per la vostra risposta. Ho provato a fare come dicevate ma credo che il problema sia ancora più subdolo.
    Dopo avere creato il calendario in una tabella e la apro succede una cosa assurda quando applico i filtri.
    per gli orari 8:00, 9:00, 10:00 effettua il filtro, ma non appena filtro l'orario 11:00 è come se non ci fosse nessun record eppure i record ci sono perchè li vedo. Spero di essere stato chiaro ed in caso contrario me ne scuso.
    Grazie sempre
  • Re: Differenza formato orario con ciclo DAO

    Presenta il criterio (nella data ed ora) con cui filtri l'intervallo per l'orario di interesse.
  • Re: Differenza formato orario con ciclo DAO

    Allego lo screen che come vedi ci sono tutti gli orari ma appena seleziono 11:00 è come se non ci fosse
    Allegati:
    17081_a2961c99f8441c66402864e453b6e705.png
    17081_a2961c99f8441c66402864e453b6e705.png

    17081_3ff22dc76aba283497e2110f752986bc.png
    17081_3ff22dc76aba283497e2110f752986bc.png

    17081_e8ffc30266618423b9902465a12c34f3.png
    17081_e8ffc30266618423b9902465a12c34f3.png
  • Re: Differenza formato orario con ciclo DAO

    Se il campo è di tipo: data ed ora, il relativo filtro sarà, quindi, specifico prima per la data ed infine per le ore (dello specifico giorno).
    Quindi prima devi selezionare la data e poi il relativo orario.
    Considera che con un filtro in base a selezione non avrai opportunità di selezionare tutte le date a fronte di un orario (a meno di non modificare la struttura con gli orari indipendenti dalla data):
    https://support.office.com/it-it/article/applicare-un-filtro-per-visualizzare-record-selezionati-in-un-database-di-access-2a493ded-e544-4144-9103-b9b1d1865147
  • Re: Differenza formato orario con ciclo DAO

    Aggiungo a quanto suggerito da Willy che spesso si usa filtrare i campi data applicando l'inversione del formato... ovvero si formatta il campo con il formato del criterio per agevolare il tutto...
    In sostanza si crea un campo calcolato fittizio sul quale applicare AS-IS il criterio.
    Per capirci:
    Format(CampoData,'hh:nn')='07:00'
    Formula inserita da QBE SQL oppure da VBA... altrimenti PUNTOVIRGOLA ed accezione ITALIANA del formato.
    Questo sistema risulta non solo più semplice da attuare ma flessibile in quanto la stringa della Formattazione agevola il passaggio del criterio...
  • Re: Differenza formato orario con ciclo DAO

    Grazie ragazzi per le vostre spiegazioni esaustive! Brutta bestia la gestione data/ora con access
Devi accedere o registrarti per scrivere nel forum
12 risposte