Newsgroup: it.comp.appl.access
Titolo: Query Between

Vi chiedo una dritta per impostare una query sql del tipo "Between campo1
and campo2" dove se campo1 č vuoto deve partire dall'inizio e/o se campo2 č
vuoto deve arrivare fino alla fine.
Saluti
Sandrobi

 wrote in message
news:c4EIc.47872$
GQ3.1...@twister2.libero.it

between iif(isnull(campo1);valoreiniziale;campo1) and 
iif(isnull(campo2);valorefinale;campo2)
Ciao
Marco
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 iif(isnull(campo2);valorefinale;campo2)
Raffiniamo questa soluzione.
Prima di tutto si può sostituire l'iif ..isnull con nz, quindi
between nz(campo1;valoreiniziale) and nz(campo2;valorefinale)
Poi, se quei due valori non sono delle costanti (per esempio un valore
bassissimo e uno altissimo) ma si vuole proprio i due estremi contenuti in
tabella in quel momento, si può fare
between nz(campo1;dmin("campo";"tab")) and nz(campo2;dmax("campo";"tab"))
Antonio

 Antonio
Ottimo e abbondante!
Sandrobi

 Antonio
Se come sembra la funzione nz restituisce un valore di tipo testo questo
potrebbe creare problemi con dati di altra natura ?
Che tempi di risposta avrebbe una query contenente dmin/dmax applicati
su una tabella di dimensioni notevoli ?
Se proprio dmin/dmax deve essere non è meglio calcolarli ad esempio in
apertura della form in cui vengono specificati campo1 e campo2 in modo
di calcolarli una volta per tutte ?


 di calcolarli una volta per tutte ?
Ma scusa, viene comunque eseguito una volta sola nella query!!!
Antonio

 Ma scusa, viene comunque eseguito una volta sola nella query!!!
D'accordo, intendevo la query ripetuta + volte.
PS: č corretto intervenire tagliando il tuo messaggio inserendo i
commenti come ho fatto io ? 


 Marco
Certo, si dovrebbe fare sempre così, ma dovresti lasciare l'header per
capire a chi stai rispondendo
Antonio

 Antonio
Grazie e alla prossima


 ovviamente esiste, ma basta saperlo e tenerlo presente .....
Ovviamente quanto asserisco proviene dall'esperienza personale.
Tenendo conto che sono asserzioni su argomenti non certificati poi ci
possono essere esperienze diverse che le contrastano.
Io non ho avuti problemi scrivendo così, però non è detto che possano
capitare in particolari condizioni.
Il quando possibile più che altro però si riferiva al fatto "se il contesto
rende possibile la conversione senza ambiguità"
Antonio


L'unico difetto riscontrato è quando limite1 o limite2 è nullo e c'è solo un
record nella tabella: siccome questo record è sia minimo che massimo ritorna
comunque anche se non è nel range desiderato.
Direi che è un problema meno che veniale!
Sandrobi


Anch'io avevo capito così.
Non te la prendere Antonio.
E' vero che i bug esistono ma è anche vero che spesso pretendiamo
l'impossibile e per trovare la soluzione basta cambiare strada.
Ciao.
Sandrobi

 Direi che è un problema meno che veniale!
No, un momento.
Between ... and prevede che gli estremi siano compresi nel range selezionato
eh!
Quindi è giusto che ti prenda quel record
Antonio


Appunto dicevo che a volte pretendiamo troppo! Non ho detto che è un
"errore" di Access ma un "difetto" (venialissimo) di questa soluzione che
comunque mi sembra la migliore e la più semplice.
Il difetto (non errore, ripeto) è che se ho una tabella in cui ho solo il
record "D" e imposto la query da "E" a "Null" mi ritorna il record "D" che
non è tra quelli che voglio.
A me va bene comunque, ma se mi serve di evitare evitare la cosa, basta
usare l'altra soluzione in cui imposto io il valore minimo e il valore
massimo che in qualche caso potrebbe presentare più problemi di quanti ne
risolva.
Se il campo è alfabetico posso mettere da "A" a "ZZ", se è numerico da "0" a
"999999", se è data da "#01/01/2000#" a "#12/31/2099#" ma ogni volta bisogna
stare a ragionare i possibili valori che interessano quel campo....
Sandrobi

 stare a ragionare i possibili valori che interessano quel campo....
Resta il fatto che a richiesta sofistica, ci vuole soluzione sofistica...
Antonio