|  | 		    
					
        
         
          
         
	
          | |  | 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
 
 
 
 
 |  |  | 
 |  |