Newsgroup: it.comp.lang.visual-basic
Titolo: Propietà Filter di ADO

Qualcuno sà come posso usare un where con la condizione between nella
prpietà filter?
Gazie è urgente
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 
Da MSDN:
"Operator must be one of the following: <, >, <=, >=, <>, =, LIKE."
Puoi sostiturla con qualcosa del tipo:
data >= #mm/dd/yyyy# AND data <= #mm/dd/yyyy#
L'espressione per la data dipende dal database che utilizzi ...
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

 data >= #mm/dd/yyyy# AND data <= #mm/dd/yyyy#
uhm.... sono perplesso....
la data, con questo formato, è valida se inserita nell'istruzione sql. nella
clausola filter deve rispettare le impostazioni internazionali del pc, almeno
stando alle prove che ho fatto qualche giorno fa. A te risulta diversamente?
--
Salutoni
Sergio


Non ho verificato, ma spero vivamente che tu ti sbagli...
Ciao
Alberto
--
E non so se avrò gli amici a farmi il coro,
o se avrò soltanto volti sconosciuti,
canterò le mie canzoni a tutti loro
e alla fine della strada
potrò dire che i miei giorni li ho vissuti...

Il 3/27/2003 10:06 AM, CSSoft scrisse:

"Value is the value with which you will compare the field values (for 
example, 'Smith', #8/24/95#, 12.345 or $50.00). Use single quotes with 
strings and pound signs (#) with dates."
Adesso comunque provo, di solito non uso Filter ...


 
Purtroppo non sbaglia ... ;-(
adoRS.Filter = "data>=#01/01/2003# And data <= #01/13/2003#"
mostra record dal 1 gennaio al 13 gennaio
adoRS.Filter = "data >= #01/01/2003# And data <= #01/12/2003#"
Continuero' a non usare Filter ...
Nelle query io metto sempre datevalue(data) per evitare problemi, ma in 
Filter non si puo'!
Credo che continuero' a non usare Filter ... :-(
ciao
	maxx
P.S. Ma perche'?????


 Non ho verificato, ma spero vivamente che tu ti sbagli...
anch'io speravo di sbagliarmi...
La cosa sta così....
ho un elenco di ordinativi, diciamo caratterizzati dall'id del cliente, il
progressivo (per quel cliente) e la data di emissione. Questo elenco deve essere
confrontato con un altro elenco, per vedere se l'ordinativo è stato intercettato
e lavorato.
La cosa ovvia era quella di cercare se nel secondo elenco c'era un ordinativo
con quell'id e quel progressivo, se non fosse che nei nostri simpatici sistemi
informativi gli ordinativi sono numerati a capocchia, per una operazione possono
essere presenti più ordinativi e quindi puo succedere che io lavori l'ordinativo
con id 3344, progressivo 15, e mi chiedano a che punto sta la pratica id 3344,
progressivo 16... anche se si tratta della stessa "operazione" (bello lavorare
da queste parti, eh? Poi Lupo si lamenta se deve aspettare 20 giorni....).
Quindi mi sono deciso a cercare gli ordinativi per id cliente e data di
emissione, quindi da informatico sgamato ho scritto:
rsPraticheLavorate.Filter="[id cliente]='" & rsPraticheDaControllare("Id
Cliente") & "' and [Data ordine] = #" & format(rspratichedacontrollare("Data
ordine"), "mm/dd/yyyy") & "#"
risultato: le pratiche non vengono trovate....
togliendo il format, e quindi lasciando fare alle impostazioni internazionali,
tutto va a posto....
La cosa non è poi scandalosa: non è il database a "processare" quella
informazione, non è una istruzione SQL, ma è tutta giocata all'interno del
recordset, quindi è possibile un comportamento del genere.
Certo non è particolarmente "coerente" con il resto.....
--
Salutoni
Sergio

 Sergio


 Sergio


 tira su niente, anche se i record ci sono!
due consigli:
1) posta il codice con cui definisci la proprietà filter
2) "quota" in modo più decente
--
Salutoni
Sergio

 
Correggo:
adoRS.Filter = "data >= #01/01/2003# And data <= #01/12/2003#"
mostra record dal 1 gennaio al 1 dicembre ...


 -- 



 cosě funziona, Grazie.
ma il campo č di tipo date/time o testo ?
--
Salutoni
Sergio

 cosě funziona, Grazie.
A parte i problemi di formato di cui si e' parlato, a me funziona anche 
nella versione meno barocca:
adoRS.Filter = "Data >= #16/12/2002# AND data <=#17/12/2002#"
o
adoRS.Filter = "Data >= '16/12/2002' AND data <='17/12/2002'"
o anche
adoRS.Filter = "Data >= 16/12/2002 AND data <=17/12/2002"
ciao
	maxx


 
E anche:
adoRS.Filter = "Data >= 12/16/2002 AND data <=12/17/2002"!!
comincio a pensare che VB sappia cosa mi serve ... ;-)


 comincio a pensare che VB sappia cosa mi serve ... ;-)
è il comportamento standard di vb: se non riesce ad interpretare la data secondo
le impostazioni internazionali del pc, prova a convertirla in altro modo.
Sarebbe curioso vedere come si comporta in un sistema, settato USA, fornendogli
"15/03/2003"....
--
Salutoni
Sergio

Il 3/27/2003 11:33 AM, CSSoft scrisse:

Non restituisce nessun record!
Io vorrei vedere il codice MS di gestione delle date, sarebbe molto 
istruttivo ...
ciao
	maxx
P.S. Quel che volevo puntualizzare con i 4 esempi e' che se non si fa 
attenzione si rischia di ottenere risultati non corretti ...


 Sergio


 attenzione si rischia di ottenere risultati non corretti ...
appunto: il comportamento standard di vb ;-)
--
Salutoni
Sergio

Il 3/27/2003 11:48 AM, CSSoft scrisse:

:-)
	maxx


>> così funziona, Grazie.
Quell'Or finale doppio e identico cosa significa?
La data del 17/12/2002 non poteva essere già compresa nella prima parte
mettendo un < di 18/12/2002?
Che poi la Filter accetti di trattare/interpretare campi date/time come se
fossero testo mi perplime, al punto da dubitarne...

 *Tommaso* ha scritto:






 esterni non posso conoscerne il valore prima...
Capisco, ma la seconda parentesi non mi quadra lo stesso e inoltre avresti
fatto meglio a pubblicare il codice esatto, magari specificando il reale
contenuto (e tipo) delle variabili/parametri. Qui, credi a me, rischiamo di
girarci attorno inutilmente...

 > ma il campo è di tipo date/time o testo ?


 Confermate???
Con ADO si può vedere tutto e il contrario di tutto, comunque la mia
risposta, d'acchito, è no, su tutti i fronti.
Che poi qualche pazzo abbia inventato le conversioni implicite (da
impostazioni locali per campi date/time verso testo) anche nei comandi SQL
che sembravano l'ultima frontiera intonsa, è un altro discorso.
In altre parole, io bevo quando ho sete e giusto per qualche sporadico
piacere... loro no.

 Confermate???
no.
almeno, nelle prove che ho fatto (e ho appena rifatto, per sicurezza :-) ), vedi
il post "Date nei database", il metodo filter di ADO se ne stropiccia dei
delimitatori (#, ' o niente) e interpreta sempre secondo le impostazioni di
sistema.
p.s. in qualsiasi caso, non saresti stato uno stronzo :-)
--
Salutoni
Sergio

 che sembravano l'ultima frontiera intonsa, č un altro discorso.


 Può darsi????
Tutto può darsi. Non lo so e non userò mai Find, Filter, FindFirst e
compagnia bella.

 Quindi........
quindi hai fatto qualche pasticcio con il copia e incolla, visto che i tre casi
sono uguali.
--
Salutoni
Sergio


scusa, ho sbagliato a copiare,
il nel primo uso "data = #27/03/2003#"
nel secondo "data = '27/03/2003'"
nel terzo "data = 27/03/2003"
Insisto sul fatto della sintassi SQL
Quando ritrovo l'articolo lo posto


si, ecco il giusto
Private Sub Command1_Click()
    MsgBox .rsDocumenti.RecordCount
    rsDocumenti.Filter = "Data = '27/03/2003'"
    MsgBox .rsDocumenti.RecordCount
End Sub
Private Sub Command2_Click()
    MsgBox .rsDocumenti.RecordCount
    rsDocumenti.Filter = "Data = #27/03/2003#"


 End Sub
perdonami: questo codice (per quanto non risolutivo, in quanto la data non puň
essere "fraintesa", in quanto il giorno č superiore al 12) conferma la mia tesi:
ADO non considera significativi i delimitatori di data, e si comporta sempre
allo stesso modo, sia che ci siano, sia che manchino.
A questo punto non capisco piů qual'č l'oggetto del contendere
--
Salutoni
Sergio


Infatti questo è proprio per confermare questa tesi.
quindi tutti i post di prima, con le varie prove di # e ', di cambio
operatori logici servono a poco,
L'errore va ricercato altrove, forse proprio negli operatori sbagliati o
chissà cosa.
Se a me il codice funziona, e a emmexx che scrive
adoRS.Filter = "data >= #01/01/2003# And data <= #01/12/2003#"
non funziona, sarà proprio che l'errore sta da un altra parte???
Ho provato anche
Private Sub Command2_Click()
    MsgBox rsDocumenti.RecordCount
    rsDocumenti.Filter = "data >= #01/01/2003# And data <= #01/12/2003#"
    MsgBox rsDocumenti.RecordCount
End Sub
e funziona benissimo

 
Permettimi, ma io ho scritto che:
rsDocumenti.Filter = "data >= #01/01/2003# And data <= #01/13/2003#"
restituisce record con data tra il 1 gennaio ed il 13 gennaio. La data 
viene cioe' interpretata all'italiana perche' all'inglese non esiste.
rsDocumenti.Filter = "data >= #01/01/2003# And data <= #01/12/2003#"
restituisce record con data tra il 1 gennaio ed il 1 dicembre, cioe' 
potendo scegliere tra data italiana e data inglese viene scelta la data 
italiana.
Tutto cio' implica che se si sceglie di inserire nella proprieta' filter 
date nel formato inglese, come si fa di solito in proposizioni sql,  si 
possono ottenere risultati errati! Non si ottengono errori formali, 
semplicemente il recordset non contiene sempre i record con le 
caratteristiche desiderate!
ciao
	maxx


 date in formato americano.
???
Quel filtro restituisce i record con data compresa tra:
4 gennaio e 12 gennaio (data italiana)
non tra:
1 aprile e 1 dicembre (data americana)
Ovviamente sul tuo sistema la data deve essere impostata all'italiana ...


 Ovviamente sul tuo sistema la data deve essere impostata all'italiana ...
si scusa, ho fatto un po di casino nelle varie prove, ed ho postato il
vodice sbagliato.

*Glauco Cucchiar* ha scritto:

Scusa se lo dico, sai, ma la cosa sembra sistematica...
Ok, ok, sarebbe stato meglio starmene zitto...