Newsgroup: it.comp.appl.access
Titolo: Ricerca dati in un intervallo di date

In un form ho messo varie caselle di testo (txtTrasportatore,
txtFornitore, txtMeseAnno, txtDaData, txtAData), una casella di
riepilogo (lstDati) e un tasto trova (btnTrova) e altri che per ora
non interessa. Il risultato che voglio ottenere è la restituzione dei
dati in funzione dei criteri immessi nelle caselle di testo. La mia
incapacità è creare il codice che funzioni nel restante mio codice per
la ricerca Da Data - A Data. Posto il mio codice:
Private Sub btnTrova_Click()
Const IstrSelect As String = " SELECT [Contratti di acquisto].[Numero
contratto], [Contratti di acquisto].Trasportatore, [Contratti di
acquisto].Fornitore, [Contratti di acquisto].[Trasporto Euro/tonn],
Entrate.[Bolla n], Entrate.[Data bolla], Entrate.[Quantità in
Tonn]FROM [Contratti di acquisto] INNER JOIN Entrate ON [Contratti di
acquisto].[Numero contratto] = Entrate.[Numero Contratto] "
Const IstrOrderBy As String = " Order by  [Contratti di
acquisto].Trasportatore "
    'ricarico i dati della lista
    lstDati.RowSource = IstrSelect & DammiWhere & IstrOrderBy
End Sub
Private Function DammiWhere() As String
    Dim tmp As String
    tmp = ""
'Si adotta AND come operatore
'-----------------------------------------------
'-------- TRASPORTATORE ---------
'-----------------------------------------------
'controllo se c'è scritto qualcosa sulla casella
If txtTrasportatore <> "" Then
    'controllo se nella variabile c'è scritto qualcosa
    If tmp = "" Then
        'se non c'è niente
        'scrivo " where " e la condizione
        tmp = " where [Contratti di Acquisto].Trasportatore like '*" &
txtTrasportatore & "*' AND [Contratti di Acquisto].[Trasporto Euro/
tonn] <>0 "
    'altrimenti se c'è qualcosa
    Else
        'scrivo: quello che c'era prima in più " AND " e la nuova
condizione
        tmp = tmp & " AND [Contratti di Acquisto].Trasportatore like
'*" & txtTrasportatore & "*' AND [Contratti di Acquisto].[Trasporto
Euro/tonn] <>0 "
    End If 'secondo if variabile vuota
End If 'primo if (la casella è vuota)
'-----------------------------------------
'---------- FORNITORE ----------
'-----------------------------------------
'controllo se c'è scritto qualcosa sulla casella
If txtFornitore <> "" Then
    'controllo se nella variabile c'è scritto qualcosa
    If tmp = "" Then
        'se non c'è niente
        'scrivo " where " e la condizione
        tmp = " where [Contratti di Acquisto].Fornitore like '*" &
txtFornitore & "*' AND [Contratti di Acquisto].[Trasporto Euro/tonn]
<>0 "
    'altrimenti se c'è qualcosa
    Else
        'scrivo: quello che c'era prima in più " AND " e la nuova
condizione
        tmp = tmp & " AND [Contratti di Acquisto].Fornitore like '*" &
txtFornitore & "*' AND [Contratti di Acquisto].[Trasporto Euro/tonn]
<>0 "
    End If 'secondo if variabile vuota
End If 'primo if (la casella è vuota)
'-----------------------------------------
'--------- MESE/ANNO ----------
'-----------------------------------------
'controllo se c'è scritto qualcosa sulla casella
If txtMeseAnno <> "" Then
    'controllo se nella variabile c'è scritto qualcosa
    If tmp = "" Then
        'se non c'è niente
        'scrivo " where " e la condizione
        tmp = " where Entrate.[Data bolla] like '*" & txtMeseAnno &
"*'AND [Contratti di Acquisto].[Trasporto Euro/tonn] <>0 "
    'altrimenti se c'è qualcosa
    Else
        'scrivo: quello che c'era prima in più " AND " e la nuova
condizione
        tmp = tmp & " AND Entrate.[Data bolla] like '*" & txtMeseAnno
& "*' AND [Contratti di Acquisto].[Trasporto Euro/tonn] <>0 "
    End If 'secondo if variabile vuota
End If 'primo if (la casella è vuota)
'--------------------------------------
'----------- DA DATA -----------
'--------------------------------------
'controllo se c'è scritto qualcosa sulla casella
If txtdaData <> "" Then
    'controllo se nella variabile c'è scritto qualcosa
    If tmp = "" Then
        'se non c'è niente
        'scrivo " where " e la condizione
        tmp = " where Entrate.[Data bolla] like '*" & txtdaData & "*'
AND [Contratti di Acquisto].[Trasporto Euro/tonn] <>0 "
    'altrimenti se c'è qualcosa
    Else
        'scrivo: quello che c'era prima in più " AND " e la nuova
condizione
        tmp = tmp & " AND Entrate.[Data bolla] like '*" & txtdaData &
"*' AND [Contratti di Acquisto].[Trasporto Euro/tonn] <>0 "
    End If 'secondo if variabile vuota
End If 'primo if (la casella è vuota)
'--------------------------------
'------------ A DATA ------------
'--------------------------------
'controllo se c'è scritto qualcosa sulla casella
If txtaData <> "" Then
    'controllo se nella variabile c'è scritto qualcosa
    If tmp = "" Then
        'se non c'è niente
        'scrivo " where " e la condizione
        tmp = " where Entrate.[Data bolla] like '*" & txtaData &
"*'AND [Contratti di Acquisto].[Trasporto Euro/tonn] <>0 "
    'altrimenti se c'è qualcosa
    Else
        'scrivo: quello che c'era prima in più " AND " e la nuova
condizione
        tmp = tmp & " AND Entrate.[Data bolla] like '*" & txtaData &
"*' AND [Contratti di Acquisto].[Trasporto Euro/tonn] <>0 "
    End If 'secondo if variabile vuota
End If 'primo if (la casella è vuota)
DammiWhere = tmp
End Function
Naturalmente la ricerca da data a data non funziona mentre quella di
mese/anno funziona bene. Se qualcuno sa aiutarmi gle ne sarei molto
grato.
Un saluto a tutti.

 End Sub



devo essere sincero non ho letto il tuo codice, ma solitamente il problema
con le date è dovuto al formato delle date stesso
quindi ti consiglio di provare a vedere l'sql che ti restituisce e di
farla giarare manualmente
da lì vedi che errore ti restituisce, lo correggi a mano direttamente
nell'sql e poi vai a sistemare la funzione
un altro consiglio: metti i campi della maschera nel formatao data.
ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Ti ringrazio della risposta ma ho postato tutto il codice (che
peraltro è ripetitivo) per far capire a chi lo legge che l'errore sta
proprio nella condizione WHERE della ricerca sul campo da data a data.
Il format sicuramente va fatto ma è trasformare il criterio che
metterei sotto una query ( between [da data] and [a data] ) in codice
che non sono in grado di fare. L'istruzione like non credo vada bene
come per gli altri campi (meno su quello dove faccio la ricerca mese/
anno che funziona egregiamente) ma qualsiasi tentativo che ho fatto
anche con >= <= non ha sortito effetto. Sono nel  pallone.
Grazie comunque dell'aiuto.
Roberto.

=#01/01/2008# and <= #31/01/2008# e poi vedi cosa scrive nell'sql
ti restituisce questo:
WHERE (((festivi.GGLavSeguente)>=#1/1/2008# And
(festivi.GGLavSeguente)<=#1/31/2008#))
questo è il where che devi riuscire a ricavare dalla tua funzione
ciao