Newsgroup: it.comp.appl.access
Titolo: Istruzione SELECT in vba con condizione where su data

Allora, la cosa è più semplice di quanto non sia nel titolo: posto un
po' di codice per renderla più chiara:
Function provadata()
Dim dbs As Database, rs As Recordset
Set dbs = CurrentDb
Dim datacontrol As Date
Dim x As Double
datacontrol = #6/1/2008#
For x = 1 To 10
Set rs = dbs.OpenRecordset("SELECT * FROM FESTIVITA WHERE DATAFEST =
#" & datacontrol & "#")
If Not rs.EOF Then
Debug.Print "la data " & datacontrol & " è stata trovata al controllo
n. " & x
Else
Exit For
End If
datacontrol = datacontrol + 1
Next x
End Function
Sto lavorando col VBA, su Access 2003 - SP3: praticamente, assegnata
una data di inizio, tramite la tabella FESTIVITA la routine si va a
controllare se nella tabella esiste, se esiste la condizione dell' If
la rimanda a "datacontrol = datacontrol + 1" e gli fa continuare la
routine fino a che non non venga verificato che nel recordset rs sia
verificata la condizione EOF (ovvero che datacontrol non sia
presente).
E' facile intuire che nella tabella FESTIVITA, vi sono tutte le
festività dal 1 gennaio 2008 al 31 dicembre 2008 (in realtà sono
arrivato sino al 2029); ora, a occhio sembrerebbe tutto funzionante,
ma, partendo dal 1 giungo (quest'anno cade di domenica) la condizione
si verifica e viene aggiunto un giorno a datacontrol e si va al 2
giugno (festa della repubblica, anch'essa inserita nella tabella
DATAFEST) e ... puff ! LA DATA DEL 2 GIUGNO NON VIENE RICONOSCIUTA. Ho
proato in tutte le maniere:
1) assegnando a datacontrol il valore #6/2/2008# non viene
riconosciuta
2) Riscrivendola nella tabella non viene riconosciuta
3) Utilizzando recordcount, all'assegnazione del 2 giugno,
rs.RecordCount mi da uno 0
Eccetera eccetera eccetera ...
Conoscendomi ho tralasciato sicuramente qualcosa .... ma che ?!?!?
Sono esattamente 4 ore che ci sbatto ininterrottamente la testa ! Se
qualcuno ha una soluzione, ben venga ... se vi daà un errore anche a
voi ... significa che ho trovato l'ennesimo baco microsoft !

 proato in tutte le maniere:
hai provato a scrivere la data nel formato yyyy-mm-dd ?


provato anche questo, ma nisba (ci ho aggiunto un paio di debug.print
per vedere i risultati)
Ho provato mettendoci gli apici ('), le virgolette (") e i cancelletti
(#), ma niente, i risultati sono sempre:
la data 01/06/2008 è stata trovata al controllo n. 1
La data 02/06/2008 non è stata trovata
Function provadata()
Dim dbs As Database, rs As Recordset
Set dbs = CurrentDb
Dim datacontrollo As Date
Dim x As Double
Dim quest As String
datacontrollo = "2008-06-01"
For x = 1 To 10
    Set rs = dbs.OpenRecordset("SELECT * FROM FESTIVITA WHERE DATAFEST
= #" & datacontrollo & "#")
    If Not rs.EOF Then
        Debug.Print "la data " & datacontrollo & " è stata trovata al
controllo n. " & x
        datacontrollo = datacontrollo + 1
    Else
        Debug.Print "La data " & datacontrollo & " non è stata
trovata"
        Exit For
    End If
Next x
End Function
Qualche altra ipotesi ?!?!?! O, comunque grazie sempre a tutti eh ?

Per di più, deve essere un problema o di data (intesa come data
specifica, che proprio non ne vuol sapere) o diformato in cui è
scritta la data, perchè:
Function provanumero()
Dim dbs As Database, rs As Recordset
Set dbs = CurrentDb
Dim numerocontrollo As Integer
Dim x As Double
Dim quest As String
numerocontrollo = 1
For x = 1 To 10
    Set rs = dbs.OpenRecordset("SELECT * FROM NUMERI WHERE NUMERO = "
& numerocontrollo)
    If Not rs.EOF Then
        Debug.Print "Il numero " & numerocontrollo & " è stata trovato
al controllo n. " & x
        numerocontrollo = numerocontrollo + 1
    Else
        Debug.Print "Il numero " & numerocontrollo & " non è stata
trovato"
        Exit For
    End If
Next x
End Function
Nella tabella "NUMERI" nel campo "NUMERO" ci sono i valori 1,2,3 e 5,
ma manca il 4 ....
I risultati con questo codice sono:
Il numero 1 è stata trovato al controllo n. 1
Il numero 2 è stata trovato al controllo n. 2
Il numero 3 è stata trovato al controllo n. 3
Il numero 4 non è stata trovato
Non so se questo possa aiutare ... a me confonde un po' le idee
ulteriormente, ma, come si dice .... più capocce ragionano menglio di
una ..
Si attendono suggerimenti !!!!!

 voi ... significa che ho trovato l'ennesimo baco microsoft !
La mia domanda sarà quasi certamente inutile, ma, tant'è: qual'è il tipo di
dato della colonna DATAFEST della tabella FESTIVITA ?
-- 
PBsoft di Gabriele Bertolucci
www.pbsoft.it
skype:pbsoftsolution


Infatti (non è che sia proprio un novellino ;-))
Il tipo di dato è "Data/ora", quindi non è lì il problema .....

 Qualche altra ipotesi ?!?!?! O, comunque grazie sempre a tutti eh ?
-- 
CIao
Geppo 

[omissis]
Ok. Lasciate da parte le banalità, prova la seguente forma:
Set rs = dbs.OpenRecordset( _
           "SELECT * " & _
           "FROM FESTIVITA " & _
           "WHERE DATAFEST = #" & _
           DateSerial(Year(datacontrol),
                      Month(datacontrol),
                      Day(datacontrol)) & _
           "#")
e facci sapere.



Reagà ! Senza di voi il mondo sarebbe un posto peggiore !!!!! Tutte e
due le soluzioni che aveta suggerito sono valide e danno responso
(avevo pure risolto io con un bypass - ho trasposto le date in stringa
e ho lasciato i conteggi intatti) ma mi sarebbe riservita una
soluzione valida lo stesso ... ed eccola qua !
Gracias ancora !!!!

> Reagà ! Senza di voi il mondo sarebbe un posto peggiore !!!!!
Ebbene sì, in questo newsgroup molti dei frequentatori più assidui sono
come la Panda della Fiat: se non ci fossero dovrebbero essere inventati.
:-)
