Newsgroup: it.comp.appl.access
Titolo: sintassi criterio condizionale nelle query

Salve a tutti
Con A2k2 ho creato una maschera di ricerca nella quale, tra le altre cose,
ho inserito due caselle di testo che dovrebbero contenere le date di inizio
e fine ricerca; cliccando sul pulsante "Visualizza" si apre una maschera la
cui origina dati è filtrata attraverso il seguente criterio
IIf(IsNull(([Acconti].[DataAcconto])=[forms]![Imposta_Ricerca]![testo2] Or
([Acconti].[DataAcconto])=[forms]![Imposta_Ricerca]![testo4]);[acconti].[dat
aAcconto];([Acconti].[DataAcconto]>[forms]![Imposta_Ricerca]![testo2]) And
([Acconti].[DataAcconto]<[forms]![Imposta_Ricerca]![testo4]))
Se le caselle di testo sono entrambe vuote o se solo una è vuota, il
criterio si comporta come dovrebbe cioè visualizza tutto, ma se sono
entrambe piene il risultato è sempre una maschera vuota.
Qualche suggerimento?
P.S. la mia stringa iniziale era :
IIf(IsNull(forms]![Imposta_Ricerca]![testo2] Or
IsNull(forms]![Imposta_Ricerca]![testo4]);[acconti].[dataAcconto];([Acconti]
.[DataAcconto]>[forms]![Imposta_Ricerca]![testo2]) And
([Acconti].[DataAcconto]<[forms]![Imposta_Ricerca]![testo4]))
e nelle prove (Visualizza foglio dati/Visualizza struttura) andava bene ma
chiudendo e confermando il salvataggio alla riapertura ho trovato impostata
la sintasssi sopra esposta. La domanda è io e il sig Jet (credo sia Lui ad
aver modificato la sintassi se no, correggetemi) abbiamo chiesto due cose
differenti che hanno lo stesso risultato o Mr. Jet è così acuto che ha
compreso le mie deficienze ed ha tradotto correttamente ad Access il mio
linguaggio?
Grazie a tutti anticipatamente.
Ciao Buonuomo.

 ha scritto nel messaggio
news:lnLqa.70253$iy5.2...@twister2.libero.it...

Ho provato anche
IIf(IsNull(([Acconti].[DataAcconto])=[forms]![Imposta_Ricerca]![testo2] Or
([Acconti].[DataAcconto])=[forms]![Imposta_Ricerca]![testo4]);[acconti].[dat
aAcconto];Between CDate([Forms]![Imposta_Ricerca]![Testo2]) And
CDate([Forms]![Imposta_Ricerca]![Testo4]))
ma il risultato è sempre una maschera vuota


Prova con:
IIf(IsNull(([Acconti].[DataAcconto])=CVDate([forms]![Imposta_Ricerca]![testo
2])... etc.
Cioé utilizza la funzione CVDate (vedi help) per trasformare il valore
inserito in tutte le caselle di testo in valore data...
Ciao.
--
Sergio MAZZA


Scusa mi è partito il dito mentre leggevo che il tentativo con CVDate l'hai
provato.
Questo criterio lo utilizzi come filtro per l'apertura della maschera? O lo
applichi anche quando la maschera è già aperta...
Ciao.
--
Sergio MAZZA

 ha scritto nel messaggio
news:b8g7fm$mfh$1...@canarie.caspur.it...

Lo utilizzo come filtro all'apertura della maschera e tra l'altro ho fatto
un pò di prove ed ho notato che se come ultimo parametro dell'istruzione IIf
gli metto una data in formato #18/02/2003# visualizza correttamente il
risultato ma se metto >#18/02/2003# mi dà una maschera vuota.!!!


Allora prova ad assegnare il criterio costruito ad una variabile e passargli
quello come filtro, hai un maggior controllo per un esame del codice al
presentarsi di un errore:
Es.
'----------------
Dim stCriterio as string
stCriterio = ""
If not isnull(Me!testo2) then
    stCriterio="[DataAcconto]=#" & Me![testo2] & "#"
end if
if not isnull(Me!testo4) then
    if stCriterio = "" then
        stCriterio = "[DataAcconto]=#" & Me![testo4] & "#"
    else
        stCriterio ="Between #" & Me!testo2 & "# And #" & Me!testo4 & "#"
    end if
end if
DoCmd.OpenForm nomemaschera,,, stCriterio
'----------------
Ciao.
--
Sergio MAZZA

 ha scritto nel messaggio
news:b8j89n$hqk$1...@canarie.caspur.it...

Innanzitutto grazie per la pazienza che mi stai dedicando
ma, purtroppo ancora non ho risolto: ho seguito il tuo suggerimento e adesso
ottengo, all'apertura della maschera filtrata, il seguente errore
Errore di run-time '3075':
errore di sintassi (operatore mancante) nell'espressione della query
'Between #01/01/2001# And #31/12/2003#'.
 Qualche idea???
Grazie.
Ciao Buonuomo.


Che scemo! Ci credo che dava errore; la sintassi giusta č:
stCriterio ="[DataAcconto] Between #" & Me!testo2 & "# And #" & Me!testo4 &
"#"
Ciao.
--
Sergio MAZZA


Ok, è vero impostato in questo modo dovrebbe andar bene.
Innanzitutto scusa per aver risposto dopo tanto tempo, ma prorprio non
riuscivo a venirne a capo perchè lo stesso criterio lo avevo già impostato e
non funzionava, però forte del tuo post ho fatto ancora altre prove
scoprendo che su un insieme di date per esempio:
ID DataAcconto
1   18/02/2003
2   19/02/2003
3   04/04/2003
4   20/04/2003
5   21/02/2003
6   18/04/2003
impostando il filtro da 01/01/2003 a 31/03/2003
ottengo il risultato corretto e cioè ID 1,2,5
ma se imposto il filtro da 01/01/2003 a 01/04/2003
ottengo una tabella vuota
Qualche spiegazione possibile, e soprattutto qualche soluzione possibile????
Grazie Buonuomo.


P.S.
Se imposto il criterio [DataAcconto]>#01/03/2003#
ottengo come risultato tutti i record (ID 1,2,3,4,5,6)
???????


Scusa ma mi scordo sempre che con i "cancelletti" le date devono rispettare
la forma: #mm/gg/aaaa#;
cambia il codice utilizzando la funzione CVDate:
'-----------
If Not IsNull(Me!Testo2) Then
    stCriterio = "[DataAcconto]=CVDate('" & Me![Testo2] & "')"
End If
If Not IsNull(Me!Testo4) Then
    If stCriterio = "" Then
        stCriterio = "[DataAcconto]=CVDate('" & Me![Testo4] & "')"
    Else
        stCriterio = "[DataAcconto] Between CVDate('" & Me!Testo2 & "') And
CVDate('" & Me!Testo4 & "')"
    End If
End If
'-----------
Ciao.
--
Sergio MAZZA

 Ciao Buonuomo.
ma funzia sė?
Ciao.
--
Sergio MAZZA


Funzia, funzia, altrimenti ti avrei chiesto come si ottiene il
Val(Format(......))
;=)
Ciao e grazie ancora.
Buonuomo.