Newsgroup: it.comp.www.asp
Titolo: Problema interrogazione database con BETWEEN

Ciao ragazzi, ho un problema con il BETWEEN...
Mi collego al database con:
set connection = Server.CreateObject("ADODB.Connection")
set recordset1 = Server.CreateObject("ADODB.Connection")
connection.open "nomedb"
a questo punto faccio la select:
SQL="SELECT * FROM nometab WHERE nomecampo BETWEEN
'"&request("variabilepassata1")&"' AND '"&request("variabilepassata2")&"' "
set recordset1 = connectio.execute(SQL)
e puntualmente la sua risposta è:
tipi di dati non corrispondenti nell'espressione criterio
???? perchè ????
Vi spiego meglio:
L'errore lo da sia quando faccio il confronto tra date e date (il campo del
database è definito come date e la stringa che passo la converto in date con
CDate, quindi il confronto è fra data e data vera) ma anche quando cambio
nomecampo, prendendone uno in cui ci sono solo numeri sequenziali (ad
esempio IDqualcosa) e faccio la select:
SQL="SELECT * FROM nometab WHERE idqualcosa BETWEEN '5' AND '10'"
l'errore è lo stesso...
Dove sbaglio??? forse nell'aprire il database??? ma funziona tutto tranne
questo BETWEEN...
Vi ringrazio anticipatamente...

nomecampo, prendendone uno in cui ci sono solo numeri sequenziali
Se sono numeri non ci vogliono gli apici.
Prova a "rigirare" la query:
SELECT * FROM ... WHERE campo BETWEEN #data1# AND #data2#
Per "debuggare" le query la cosa migliore e' farle stampare senza
eseguirle (cioe' al posto della Conn.Execute ci metti una
Response.Write), quindi fare un bel taglia/incolla e provare la
query generata dentro al database stesso o usando un qualunque
programma che usa ODBC per "sparare" le query sul database.
Davide

 Le date devono essere indicate con il cancelletto #...#
Ti ringrazio, non sapevo il fatto del cancelletto, ma non ho ancora risolto
tutto :-)))
ho ancora uno strano problema sempre con il BETWEEN...
Faccio passare due date con un form, quindi le passo con <input type="text"
name="date1"> e <input type="text" name="date2">
poi le converto in date con data1 = CDate(request("date1")) e data2 =
CDate(request("date2"))
e poi faccio la select SQL="SELECT * FROM ... WHERE campo BETWEEN #date1#
AND #date2#"
e senti che cosa strana...
mettiamo che nel DB ho i campi
05/06/2000
10/11/2000
24/12/2000
se passo data1=01/11/2000 e data2=30/11/2000 mi tira fuori: 05/06/2000 e
10/11/2000
mentre se passo data1=30/10/2000 e data2=30/11/2000 mi tira fuori 10/11/2000
il dato corretto...
Non ti pare assurdo???? dov'e' l'errore???
Ti ringrazio anticipatamente...

Non ti pare assurdo???? dov'e' l'errore???
Secondo me confonde il mese con il giorno. 01/11 potrebbe essere sia
il primo di novembre che l'11 di gennaio, mentre 30/11 puo' essere
solo il 30 di novembre.
Le date sono la cosa piu' rognosa esistente sulla faccia della
terra.
Con Oracle avevo risolto usando una Stored Procedure che faceva
i suoi ravanamenti all'interno (in questo modo interpretava tutte
le date nello stesso modo).
Davide


Fai attenzione che devi usare la concatenazione delle stringhe
sull'istruzione SQL
SQL="SELECT * FROM ... WHERE campo BETWEEN #date1# AND #date2#"   questo fa
modificato in
SQL="SELECT * FROM ... WHERE campo BETWEEN #" & date1 & "# AND #" & date2 &
"#"
ciao
--
Kappa
kappa**nospam**@
webngo.net
www.webngo.net


I database gestiscono la data nel formato mm/gg/aaaa.
Per risolvere converti le due stringhe delle date in questo formato prima
della query sul database:
data1 = CDate(request("date1"))
data1=month(data1)&"/"&day(data1)&"/"&year(data1)
data2 = CDate(request("date2"))
data2=month(data2)&"/"&day(data2)&"/"&year(data2)
Ciao,
Andrea Z.