Istruzione SELECT non funziona con date del 2015

di il
8 risposte

Istruzione SELECT non funziona con date del 2015

Mi trovo di fronte ad una situazione senza senso.
Posto per prima cosa il codice:
Do While dData <= Me.DataFinale
        Set rst = CurrentDb.OpenRecordset("select * from [CommesseClienti] where [DataCommessa] = #" & dData & "#")
        If rst.EOF = False Then
        
        ' faccio quello che devo fare

        End If
        
        dData = DateAdd("d", 1, dData)
    Loop
Il problema è questo: il select all'interno della tabella CommesseClienti funziona solo se le date sono antecedenti al 31/12/2014.
Dal 1/1/2015 in poi il recordset rst risulta sempre VUOTO. Nonostante aprendo la tabella manualmente vi siano presenti record che dovrebbero venire selezionati.

Ho provato e riprovato ma non riesco a venirne fuori.... sembra un baco di Access. Che dite?

8 Risposte

  • Re: Istruzione SELECT non funziona con date del 2015

    Non ci credo ..
    Hai provato a fare debug e vedere che succede ?
  • Re: Istruzione SELECT non funziona con date del 2015

    Non ci credevo neanch'io.
    Certo che ho fatto il debug, riga per riga.

    Ho fatto anche di più, ho creato una nuova tabella con due campi: un contatore e una data. Ho inserito due record, uno con data 31/12/2014 e uno con data 01/01/2015.

    In una maschera creata ad hoc ho associato questo codice:
    Private Sub Pulsante_Click()
        Dim rst As Recordset
        Dim i As Integer
    
        dData = Me.Data
        Set rst = CurrentDb.OpenRecordset("select * from [Tabella1] where [Data] = #" & dData & "#")
        
        
        i = rst.RecordCount
        
        
    End Sub
    

    In questo caso tutto funziona. Il recordcount del recorset risulta corretto....
    Eppure il codice è identico all'altro, e anche le proprietà dei campi in questione nelle due tabelle.
  • Re: Istruzione SELECT non funziona con date del 2015

    Hai verificato che dData venga formattata nel formato americano: MM/DD/YYYY prima di aprire il recordset?

    Cosa contiene dData quando la passi come parametro in:
    Set rst = CurrentDb.OpenRecordset("select * from [CommesseClienti] where [DataCommessa] = #" & dData & "#")
    ?
  • Re: Istruzione SELECT non funziona con date del 2015

    DData carica inizialmente un casella formattata come data.
    il dato viene caricato come GG/MM/AAAA, ma non credo sia questo il problema, visto che se non funzionasse non dovrebbe farlo anche per date antecedenti al 1/1/2015, è quello che non mi spiego.
    Anche il campo DataCommessa della tabella CommesseClienti ovviamente è definito come data.
    Selezioni utilizzando le date le ho sempre fatte, ma mai avuto un problema finora.
  • Re: Istruzione SELECT non funziona con date del 2015

    Credi?
    Io nutro qualche (serio) dubbio.
    Quello che affermi è vero solo in parte.

    Comunque, che ti costa provare?
  • Re: Istruzione SELECT non funziona con date del 2015

    Gibra, mi hai fatto venire un dubbio e ho fatto qualche prova. Effettivamente non centra nulla l'anno.
    Deve essere prorprio un discorso di formattazione della data infatti:

    01/12/2014 non viene selezionata
    13/12/2014 viene seleziona
    01/01/2015 non viene selezionata
    23/01/2015 viene selezionata

    Quindi: ipotizzando che debba formattare il campo come MM/GG/AAAA....come faccio a formattare il campo DataCommessa nella maniera corretta se lavorando nella definizione del campo nella struttura della tabella non me lo da tra i formati selezionabili?
  • Re: Istruzione SELECT non funziona con date del 2015

    mbarbon ha scritto:


    Gibra, mi hai fatto venire un dubbio e ho fatto qualche prova. Effettivamente non centra nulla l'anno.
    Deve essere prorprio un discorso di formattazione della data infatti:
    Appunto, lo è.

    Esiste una differenza sostanziale tra il formato della data quando letto/scritto da un Recordset, rispetto ad un enunciato SQL (quello che stai usando tu).

    mbarbon ha scritto:


    Quindi: ipotizzando che debba formattare il campo come MM/GG/AAAA....come faccio a formattare il campo DataCommessa nella maniera corretta se lavorando nella definizione del campo nella struttura della tabella non me lo da tra i formati selezionabili?
    Non devi modificare nulla nella struttura della tabella! (leggi il P.S.)


    Tu devi passare la data già formattata alla stringa SQL che usi per aprire il recordset:
    
    Dim strData As String
    strData = Format(dData, "MM/DD/YYYY")
    Set rst = CurrentDb.OpenRecordset("select * from [CommesseClienti] where [DataCommessa] = #" & strData  & "#")
    
    Nota che ho usato il tipo String: infatti, essendo un enunciato in linguaggio SQL non ha alcuna importanza qual'è il Tipo di dato perché in ogni caso il linguaggio SQL accetta solo stringhe.

    P.S. Nei database, in genere, il formato delle Date è sempre quello americano.
    Se non lo è, allora è stato impostato un formato diverso, sempre che il database preveda il comando per farlo (Access non lo prevede, e non puoi).

  • Re: Istruzione SELECT non funziona con date del 2015

    Grazie! ora funziona perfettamente. C'e' sempre da imparare.....
Devi accedere o registrarti per scrivere nel forum
8 risposte