|
| SQL - at sammenligne tal sat i en tekstvar~ Fra : Jakob Munck |
Dato : 26-12-01 22:37 |
|
Jeg vil gerne lave et recordset med 5 records, der har de samme tal i 2
variable, nemlig "Indice" og "Traad". Min recordset-kode ser sådan ud:
Set RS = Conn.Execute( "SELECT TOP 5 * FROM forum where Indice = Traad order
by ID desc" )
Problemet er bare, at variablen "Indice" er defineret som tekst medens
"Traad" er defineret som tal, men rent faktisk opbevares der tal i begge
variabler. Det skulle altså kunne lade sig gøre at finde de øverste 5
records, hvor "Indice" og "Traad" er ens, også selv om den ene er defineret
som tekst og den anden som tal. Men når jeg forsøger får jeg denne
fejlmelding:
----------------------
Datatyperne stemmer ikke overens i kriterieudtrykket.
/Ansgar/ansgar.asp, line 175
---------------------------
Hvordan skal jeg skrive sætningen for at det virker?
v.h.
Jakob Munck
| |
Jakob Andersen (26-12-2001)
| Kommentar Fra : Jakob Andersen |
Dato : 26-12-01 22:59 |
|
"Jakob Munck" <jakob.munck@tdcadsl.dk> wrote in message
news:3c2a4196$0$5466$edfadb0f@dspool01.news.tele.dk...
> Jeg vil gerne lave et recordset med 5 records, der har de samme tal i 2
> variable, nemlig "Indice" og "Traad". Min recordset-kode ser sådan ud:
>
> Set RS = Conn.Execute( "SELECT TOP 5 * FROM forum where Indice = Traad
order
> by ID desc" )
I MS SQL kan man gøre sådan her:
SELECT TOP 5 * FROM forum WHERE CONVERT(varchar, Indice) = Convert(varchar,
Traad) ORDER BY ID DESC
Jeg ved ikke om man kan det i Access..
--
Jakob Andersen
| |
Jakob Munck (27-12-2001)
| Kommentar Fra : Jakob Munck |
Dato : 27-12-01 00:00 |
|
> I MS SQL kan man gøre sådan her:
>
> SELECT TOP 5 * FROM forum WHERE CONVERT(varchar, Indice) =
Convert(varchar,
> Traad) ORDER BY ID DESC
>
> Jeg ved ikke om man kan det i Access..
>
Nej, desværre. Den kommer med en fejlmelding, at "Der er en ikke-defineret
funktion "CONVERT" i udtrykket...."
Men der må være en metode, som også kan anvendes i Access.
v.h.
Jakob Munck
| |
Jakob Munck (27-12-2001)
| Kommentar Fra : Jakob Munck |
Dato : 27-12-01 09:25 |
|
Jeg har forsøgt mig med følgende kode, som skulle omdnne variablen "Indice"
til et tal:
Set RS = Conn.Execute( "SELECT TOP 5 * FROM forum where Cint(Indice) = Traad
order by ID desc" )
Men den giver denne fejlmelding:
"Den numeriske værdi er uden for området. (null)"
Hvad gør jeg galt?
v.h.
Jakob Munck
| |
Jakob Munck (27-12-2001)
| Kommentar Fra : Jakob Munck |
Dato : 27-12-01 11:17 |
|
Problemet er løst ved i stedet at teste for forekomsten af et punktum i én
af variablerne. Det fungerer.
v.h.
Jakob Munck
| |
J Andersen (28-12-2001)
| Kommentar Fra : J Andersen |
Dato : 28-12-01 08:28 |
|
On Thu, 27 Dec 2001 09:25:06 +0100, "Jakob Munck"
<jakob.munck@tdcadsl.dk> wrote:
>Jeg har forsøgt mig med følgende kode, som skulle omdnne variablen "Indice"
>til et tal:
>
>Set RS = Conn.Execute( "SELECT TOP 5 * FROM forum where Cint(Indice) = Traad
>order by ID desc" )
>
>Men den giver denne fejlmelding:
>
>
>"Den numeriske værdi er uden for området. (null)"
Prøv med CLng i stedet for CInt.
Datatypen Int omfatter kun tal mellem -32,768 og 32,767
Prøv evt. at konvertere begge værdier:
.... where CLng(Indice) = CLng(Traad)
så er du i hvert fald sikker på, at de er samme datatype :)
Good luck,
Jørn
| |
Kasper Katzmann (27-12-2001)
| Kommentar Fra : Kasper Katzmann |
Dato : 27-12-01 11:30 |
|
> Men der må være en metode, som også kan anvendes i Access.
Du kan sætte feltet indice til Number i Access.
/Kasper K
| |
Jakob Munck (27-12-2001)
| Kommentar Fra : Jakob Munck |
Dato : 27-12-01 17:55 |
|
>
> Du kan sætte feltet indice til Number i Access.
>
>
Nej, for så får jeg problemer andre steder i koden. Men bortset fra det, så
har jeg løst problemet på en helt anden måde. Men det ville da - under alle
omstændigheder - være interessant at vide hvordan man sammenligner tallene i
en tekstvariabel med tallene i en talvariabel ?
jm
| |
Jakob Andersen (27-12-2001)
| Kommentar Fra : Jakob Andersen |
Dato : 27-12-01 17:53 |
|
"Jakob Munck" <jakob.munck@tdcadsl.dk> wrote in message
news:3c2b5102$0$46333$edfadb0f@dspool01.news.tele.dk...
> Nej, for så får jeg problemer andre steder i koden. Men bortset fra det,
så
> har jeg løst problemet på en helt anden måde. Men det ville da - under
alle
> omstændigheder - være interessant at vide hvordan man sammenligner tallene
i
> en tekstvariabel med tallene i en talvariabel ?
Som sagt kender jeg ikke lige Access så indgående men man kan måske gøre
noget ala dette:
SELECT TOP 5 * FROM forum WHERE ('' + Indice + '') = ('' + Traad + '') ORDER
BY ID DESC
Men hæng mig ikke op på det...
--
Jakob Andersen
| |
Jakob Munck (28-12-2001)
| Kommentar Fra : Jakob Munck |
Dato : 28-12-01 11:31 |
|
Hej alle I kloge !
jeg har testet jeres løsninger.
1.
> SELECT TOP 5 * FROM forum WHERE ('' + Indice + '') = ('' + Traad + '')
ORDER
> BY ID DESC
>
Ovenstående giver fejlmelding fordi datatyperne i stemmer - siger den.
2.
Løsningen med at sætte begge variabler ind i et CLng(xxx) virker til gengæld
fint.
Så tak - endnu en gang - for jeres hjælp. Jeg bliver klogere hver gang, og
det er herligt !
jm
| |
|
|