Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473

    Il Mistero!

    Ciao a tutti questo è proprio un mistero...

    Ho fatto un progetto vb6 dove una SELECT seleziona gli appuntamenti presenti in un db access, questi appuntamenti li seleziona in base alla data...
    Per esempio fa l'elenco degli appuntamenti della settimana e li stampa in una list...
    Il problema è che la query che fa è giusta, pero non mi visualizza tutti gli appuntamenti, ma certi giorni li salta, cosi senza motivo, ho fatto il debug passo a passo ed ho visto che quando esegue la query che seleziona gli appuntamenti in base alla data, non sepre li seleziona::

    Ecco il codice

    oggi = Date

    ng = Format(oggi, "Dddd")


    'PROCEDURA PER TROVARE CHE GIORNO E IL LUNEDI DI QUESTA SETTIMANA
    Select Case ng

    Case "lunedì":
    data1 = oggi
    Case "martedì":
    data1 = DateAdd("d", oggi, -1)
    Case "mercoledì":
    data1 = DateAdd("d", oggi, -2)
    Case "giovedì":
    data1 = DateAdd("d", oggi, -3)
    Case "venerdì":
    data1 = DateAdd("d", oggi, -4)

    End Select




    'PROCEDURA CHE SELEZIONA GLI APPUNTAMENTI DEL DB

    For i = 1 To 5 'ciclo dal lunedi al venerdi

    Set conn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    conn.Open cn

    SQL = "SELECT Titolo FROM APPUNTAMENTI WHERE (Data=#" & data1 & "#)"
    rs.Open SQL, conn




    While Not rs.EOF


    titolo = rs.Fields(0)
    List1(i - 1).AddItem titolo




    rs.MoveNext

    Wend

    rs.Close
    conn.Close

    Set conn = Nothing
    Set rs = Nothing

    'data1 = DateAdd("d", data1, 1)
    data1 = data1 + 1 'incremento la data per i giorni successivi

    Next i



    facendo il debug, quando arrivo alla query certe volte salta, come se non fosse vera...premetto che nel mio Db ho messo degli appuntamenti per tutta la settimana, percio esistono e li deve trovare!!

    Chi vuole aiutarmi a risolvere questo mistero???

    Grazie

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Nessun mistero.

    Se devi fare un confronto tra date devi farlo utilizzando lo stesso formato.

    oggi = Date

    è diverso da

    Data=#" & data1 & "#"

    Perchè viene sempre inclusa anche la parte Time.
    Ricorda che un campo di tipo data è in realtà un campo DateTime.

    Quindi
    oggi = Date sarà 11/09/2008

    mentre il database si aspetta un tipo DateTime:
    11/09/2008 10.20.37
    Poco importa come lo vedi tu nel database, il valore interno è sempre DateTime completo, perchè non si può scindere la parte Time da quella Date, ma si può visualizzare ed analizzare solo la parte che serve, ma occorre istruire il motore del DB.
    Inoltre, il formato interno delle date potrebbe essere diverso (ed in genere lo è) perchè molti database usano il formato americano "MM/DD/YYYY", e se tu gli passi il formato italiano "DD/MM/YYYY" è ovvio che non trova corrispondenza.

    Per cui dovresti fare così:

    codice:
    Dim sData As String
    sData = Format(Data1, "MM/DD/YYYY")
    SELECT Titolo FROM APPUNTAMENTI WHERE (Data=#" & sData & "#)"
    Ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    GRAZIE!!!
    Ora funziona...

    Pero cè sempre un mistero, io lo sapevo che il db si aspettava una data con anche l'ora, infatti per questo motivo avevo impostato il formato della data come data in cifre, senza i numeri, pensando di aggirare il problema dei formati delle date...

    Poi la cosa strana è perche alcune date le accettava mentre altre no, nonostante il metodo di inserimento è lo stesso???

    Vabbè...
    grazie tante lo stesso

    :ciauz

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da androita
    GRAZIE!!!
    Ora funziona...
    Bene

    Originariamente inviato da androita
    Pero cè sempre un mistero, io lo sapevo che il db si aspettava una data con anche l'ora, infatti per questo motivo avevo impostato il formato della data come data in cifre, senza i numeri, pensando di aggirare il problema dei formati delle date...
    Invece...

    Originariamente inviato da androita
    Poi la cosa strana è perche alcune date le accettava mentre altre no, nonostante il metodo di inserimento è lo stesso???
    :ciauz
    Se non dici espressamente quali date, quale inserimento, dove, come, ecc. è impossibile aiutarti, non credi ?

    Ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    mi psiego meglio, te mi hai ricordato che il formato deve essere o stesso... pero io avevo cambiato il formato della data (nella mia tabella del db) in data in cifre, cosi il formato sarebbe stato lo stesso....

    Il meistero è che nella mia tabella ho inserito una 30ina di appuntamenti, e alcuni me li visualizava, mentra altri no, ma senza una logica, se fosse stato sbagliato il formato, non avrebbe dovuto far visualizzare nessun appuntamento, mentre qualcuno me lo visualizzava!


  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da androita
    mi psiego meglio, te mi hai ricordato che il formato deve essere o stesso... pero io avevo cambiato il formato della data (nella mia tabella del db) in data in cifre, cosi il formato sarebbe stato lo stesso....
    che non serve a niente.
    Quello che tu cambi è il formato di visualizzazione, non quello del dato che non hai il potere di cambiare in alcun modo. Ricordalo!

    Originariamente inviato da androita
    Il meistero è che nella mia tabella ho inserito una 30ina di appuntamenti, e alcuni me li visualizava, mentra altri no, ma senza una logica, se fosse stato sbagliato il formato, non avrebbe dovuto far visualizzare nessun appuntamento, mentre qualcuno me lo visualizzava!

    Vedo che ancora non hai capito.
    Se inserisci un valore in formato italiano "DD/MM/YYYY" il database lo registra in americano "MM/DD/YYYY", esempio pratico: se inserisci "10/09/2008" (10 settembre 2008) lui la memorizza così "09/10/2008" (9 ottobre 2008).
    Poi, quando tu vai fare una ricerca per la data "10/09/2008" lui risponderà che questa data non esiste, perchè lui ha il "09/10/2008".

    Quindi, sia quando scrivi la data che quando la leggi devi sempre usare Format(sData,"MM/DD/YYYY").

    Se tu usassi le query con parametri, tutti questi problemi non esisterebbero più. :-)
    Niente più apici per le stringhe, cancelletti per le date, niente problemi di formattazione, niente di niente. Si scrive qualche riga di codice in più, ma il risultato è ineccepibile.
    Indi per cui, ti consiglio vivamente di documentarti su Command e Parameters


    Ciao

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Il regolamento non è stato messo lì per nulla:

    1) Il linguaggio va sempre specificato anche nel titolo
    2) Il titolo deve contenere una breve descrizione del problema (che sia significativa!).

    Correggo il titolo e ti invito a prendere visione del regolamento.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2025 vBulletin Solutions, Inc. All rights reserved.