Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it L'avatar di Gammino
    Registrato dal
    Nov 2001
    Messaggi
    195

    [VB6] Errore assurdo su due date!

    Non ci credo neanche io...

    Ho 2 variabili di tipo Date in una Sub, che uso per gestire due orari (senza tenere traccia del giorno).

    Le due variabili seguono strade diverse subendo operazioni varie ed alla fine le confronto.

    Supponendo che Data1 risulti 12.15.00, e che anche Data2 risulti 12.15.00 per lui DATA1 > DATA2 !!!!!

    Ho pensato subito ad un errore di data, o ad un errore tipo AM/PM allora ho inserito:
    codice:
    MsgBox CSng(Data1)
    MsgBox Csng(Data2)
    SONO UGUALI!!! Lo stesso numero!

    Aiutatemi, please! Non so proprio dove...
    Ci sono giornate in cui mi sembra che il mondo giri al contrario... poi mi sveglio e mi accorgo che purtroppo gira sempre nella stessa direzione: quella sbagliata!
    (Gammino)

  2. #2
    il problema risiede nel fatto che un tipo Date ha una dimensione di 8 byte e cioè paragonabile ad un double. ora basta che un valore decimale sia diverso quando avviene il cast del dato nel formato date ed ecco l'errore. Il date è un formato elapsed time.
    Il dubbio non è piacevole, ma la certezza è ridicola. Solo gli imbecilli son sicuri di ciò che dicono.

  3. #3
    Utente di HTML.it L'avatar di Toeke
    Registrato dal
    Aug 2002
    Messaggi
    348
    Per ovviare al problema potresti convertire le due date in string.
    Oppure caricare in due variabili locali che poi si confrontino tra loro.

  4. #4
    Utente di HTML.it L'avatar di Gammino
    Registrato dal
    Nov 2001
    Messaggi
    195
    Scusa Genius ma ovviamente non ti ho seguito mica troppo (mica tutti Geniis :gren: , scherzo!).
    Tornando seri (+ o -), una variabile Date è di 8 byte, ok come un Double perchè la data è immagazzinata come numero a virgola mobile, la parte intera identifica la data, la parte decimale identifica l'ora...

    Il problema è che vorrei avere la possibilità di VEDERE realmente che Data1 è MAGGIORE davvero di Data2 per poter trovare il mio errore.

    E poi ho provato a fare DateDiff("s",Data1,Data2) è mi da 0.
    Come faccio ad estrapolare il numero Double che genera la data?
    Basta un CDbl?
    Ti sarei molto grato per una risposta!

    X Toeke: E' vero, ci avevo pensato; convertendo in stringa risolverei il singolo problema anche se poi dovrei riconvertire in formato Date per fare il confronto (sennò "10.12" risulterebbe < di "8.20" :quipy: ) e poi mi rimarrà sempre il terrore che si ripresenti il problema ogni volta che farò operazioni sulle date, se non capisco bene cosa lo causa.
    Comunque parliamo già di due variabili locali di tipo Date che confronto tra loro.

    Grazie ad entrambi! Attendo e spero news...
    Ci sono giornate in cui mi sembra che il mondo giri al contrario... poi mi sveglio e mi accorgo che purtroppo gira sempre nella stessa direzione: quella sbagliata!
    (Gammino)

  5. #5
    Utente di HTML.it L'avatar di Toeke
    Registrato dal
    Aug 2002
    Messaggi
    348

    ???

    codice:
    Private Sub Form_Load()
        Dim data1 As Date
        Dim data2 As Date
        data1 = Date
        data2 = Date
        If data1 = data2 Then
            MsgBox "le date sono uguali"
        ElseIf data1 < data2 Then
            MsgBox data1 < data2
        Else
            MsgBox data1 < data2
        End If
    End Sub
    Questo semplice script non mi genera l'errore che vai descrivendo

    Cmq se tratto le date con il formato stringa le tratto senza virgole, punti o altro.
    Personalmente per ovviare i problemi con le date uso questo formato yyyymmgg il cui confronto non da la possibilita di errore.


  6. #6
    Utente di HTML.it L'avatar di Gammino
    Registrato dal
    Nov 2001
    Messaggi
    195
    Mi sa che sto facendo venire il mal di testa anche a te...

    Dunque...
    Innanzitutto sono delle variabili in formato Date ma contengono orari percui, come scrivevo prima, anche senza usare la punteggiatura "1015" per lui sarebbe comunque prima di "800" (10.15 e 8.00). Inoltre tenendo le variabili di tipo String non potrei usare DateAdd, ecc.

    Lo so che così funziona; il problema si verifica solo dopo alcune semplici operazioni di addizione e sottrazione contenuti nella mia Sub.

    Secondo me uno dei passaggi della mia sub "attacca" al valore una sorta di "infinitesimo" di secondo (credo fosse quello che spiegava Genius) e DEVO capire quale operazione per non incorrere nuovamente nell'errore in futuro!

    Facendo
    codice:
    Data2=CDate(CStr(Data2))
    e quindi praticamente facendo una doppia conversione Date-String-Date infatti il tutto funziona, ma non posso fare sempre questa operazione ogni volta che devo fare delle operazioni con il valore di un orario...

    Mi sto "insegugiando" , se lo sgamo vi faccio sapere...

    Sono sempre bene accetti suggerimenti di ogni sorta!
    Ci sono giornate in cui mi sembra che il mondo giri al contrario... poi mi sveglio e mi accorgo che purtroppo gira sempre nella stessa direzione: quella sbagliata!
    (Gammino)

  7. #7
    Utente di HTML.it L'avatar di Gammino
    Registrato dal
    Nov 2001
    Messaggi
    195

    MA NON E' POSSIBILE!!!

    Guardate un pò... Questo è il codice:
    codice:
    MsgBox CDbl(Date1) & ">" & CDbl(Date2) & "=" & (CDbl(Date1) > CDbl(Date2))
    e il risultato è nell'immagine allegata...

    NON E' POSSIBILEEEEE

    Mi stà dicendo che (1>1)=True !!!!
    Immagini allegate Immagini allegate
    Ci sono giornate in cui mi sembra che il mondo giri al contrario... poi mi sveglio e mi accorgo che purtroppo gira sempre nella stessa direzione: quella sbagliata!
    (Gammino)

  8. #8
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    ma non puoi usare 2 variabili Date ? :master:

  9. #9
    Utente di HTML.it L'avatar di Gammino
    Registrato dal
    Nov 2001
    Messaggi
    195
    Uso 2 variabili Date!

    Gente qui c'è da rabbrividire...

    Dopo ore di testardaggine gurdate cosa ho trovato:

    In un form, inserite un commandbutton e copiate il seguente codice:
    codice:
    Private Sub Command1_Click()
    Dim Data1 As Date, Data2 As Date
        Data1 = CDate("8:45")
        Data2 = CDate("0:30")
        
        Data2 = Data2 + Data1
        MsgBox "8:45 + 0:30 = 9:15, giusto? Lui dice che è " & (Data2 = #9:15:00 AM#)
        
        MsgBox "Proviamo con DateAdd..."
        
        Data1 = CDate("8:45")
        Data2 = CDate("0:30")
        
        Data1 = DateAdd("n", 30, Data1)
        MsgBox "8:45 + 0:30 = 9:15, giusto? Lui dice che è " & (Data1 = CDate("9:15"))
    End Sub
    Non vi dico i risultati!

    Ho anche capito dov'è il bug... ma sono ancora scioccato...

    Ve lo narro quando mi sono ripreso...
    Ci sono giornate in cui mi sembra che il mondo giri al contrario... poi mi sveglio e mi accorgo che purtroppo gira sempre nella stessa direzione: quella sbagliata!
    (Gammino)

  10. #10
    Utente di HTML.it L'avatar di Gammino
    Registrato dal
    Nov 2001
    Messaggi
    195

    E' una sorta di bug...

    In parole povere per VB6 aggiungendo 30 minuti alle 8.45 non si ottengono esattamente le 9.15.

    Credo che ciò sia dovuto al fatto che si sommano due numeri double periodici (8.45 e 0.30), anche se non ho ancora capito bene il motivo reale.

    Se provate questo codice capite bene l'enigna.
    Somma 30 minuti alle 8.45, confronta il valore ottenuto dalla somma con CDate("09:15") e ritorna False invece di True!

    codice:
    MsgBox "Se non erro 8:45 + 30 min = 9:15?  Proviamo..."
    MsgBox "Se a voi, in VB6, da True brucio il mio PC..."
    MsgBox (DateAdd("n", 30, CDate("8:45")) = CDate("9:15"))
    MsgBox "E, ancor più assurdo, i due valori Double sono identici!...: " & CDbl(DateAdd("n", 30, CDate("8:45"))) & " = " & CDbl(CDate("9:15"))
    MsgBox "Fatemi sapere!"
    Ci sono giornate in cui mi sembra che il mondo giri al contrario... poi mi sveglio e mi accorgo che purtroppo gira sempre nella stessa direzione: quella sbagliata!
    (Gammino)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.