Avatar billede hifi4all Nybegynder
29. juli 2005 - 13:28 Der er 14 kommentarer og
2 løsninger

MSSQL - Between to priser (tal)

Jeg ønsker at søge mellem to priser fra en formular eller streng i adresselinien, ved nedenstående kodestump.

Det resulterer dog i en kedelig fejl:
"Microsoft OLE DB Provider for SQL Server error '80040e21'
The requested properties cannot be supported."

Hvis jeg fjerner "BETWEEN" udtrykket, virker søgningen 100%, bare uden muligheden for at søge mellem de to priser, som er ønskeligt! :O(

Kan nogen hjælpe - jeg føler mig lost!

På forhand tak! ;O)

//Koden :

Produkttype = " '%' "
Lokalitet = " '%' "
Annoncetype = " '%' "
Fritekst = " '%' "
PrisMin = " '%' "
PrisMax = " '%' "

    if Request.Form("Produkttype") <> "" then
        Produkttype = " '%" & Request.Form("Produkttype")& "%' "
    end if
    if Request.Form("Lokalitet") <> "" then
        Lokalitet =  " '%" & Request.Form("Lokalitet")& "%' "
    end if
    if Request.Form("Annoncetype") <> "" then
        Annoncetype =  " '" & Request.Form("Annoncetype")& "' "
    end if
    if Request.Form("PrisMin") <> "" then
        PrisMin =  " '" & Request.Form("PrisMin")& "' "
    end if
      if Request.Form("PrisMax") <> "" then
        PrisMax =  " '" & Request.Form("PrisMax")& "' "
    end if
    if Request.Form("fritekst") <> "" then
        fritekst =  " '%" & Request.Form("fritekst")& "%' "
    end if
   
    '----------------------------------------------------------------------

    if Request.QueryString("Produkttype") <> "" then
        Produkttype = " '%" & Request.QueryString("Produkttype")& "%' "
    end if
    if Request.QueryString("Lokalitet") <> "" then
        Lokalitet =  " '%" & Request.QueryString("Lokalitet")& "%' "
    end if
      if Request.QueryString("Annoncetype") <> "" then
        Annoncetype =  " '" & Request.QueryString("Annoncetype")& "' "
    end if
    if Request.QueryString("PrisMin") <> "" then
        PrisMin =  " '" & Request.QueryString("PrisMin")& "' "
    end if
      if Request.QueryString("PrisMax") <> "" then
        PrisMax =  " '" & Request.QueryString("PrisMax")& "' "
    end if
    if Request.QueryString("fritekst") <> "" then
        fritekst =  " '%" & Request.QueryString("fritekst")& "%' "
    end if
   
set rsAds = Server.CreateObject("ADODB.Recordset")
rsAds.ActiveConnection = MM_conn_STRING
rsAds.Source = "SELECT * FROM ADS, USERS, TYPES WHERE AD_KATEGORI LIKE" & Produkttype & " AND U_LOKALITET LIKE" & Lokalitet & " AND AD_TYPE LIKE" & Annoncetype & " AND (AD_TITLE LIKE " & fritekst & " OR AD_DESCRIPTION LIKE " & fritekst & ") AND (AD_PRICE BETWEEN " & PrisMin & " AND " & PrisMax & ") AND AD_EXPIRED >= GetDate()  AND AD_POSTER = U_ID AND AD_TYPE = TYPE_ID AND U_LUKKET = 1 " & VarSorter & ""
Avatar billede softspot Forsker
29. juli 2005 - 13:35 #1
Er du sikker på at både PrisMin og PrisMax indeholder en numerisk værdi?
Avatar billede hifi4all Nybegynder
29. juli 2005 - 13:36 #2
Jeps - det er kun tal!
Avatar billede hifi4all Nybegynder
29. juli 2005 - 13:40 #3
ved nærmere eftertanke...

Hvis jeg indtaster, i adresselinien, f.eks. soegresultat.asp?prismin=0&prismax=250000 gør søgningen igennem!!!!!

Så jeg formoder så at det ikke er numerisk, når data hentes fra formularen.

Hvad gør jeg så her, når det er en standard formular som f.eks.:
<input type="text" name="PrisMin" size="6" maxlength="6" style="width: 260">
Avatar billede softspot Forsker
29. juli 2005 - 13:42 #4
Du skal enten have et check på klienten eller på serveren (helst begge steder) af om det er valide data der er indtastet i felterne.
Avatar billede busschou Praktikant
29. juli 2005 - 13:45 #5
if Request.Form("PrisMin") <> "" then
        PrisMin =  " '" & Request.Form("PrisMin")& "' "
    end if
      if Request.Form("PrisMax") <> "" then
        PrisMax =  " '" & Request.Form("PrisMax")& "' "
    end if
---
skal vel være
----
if Request.Form("PrisMin") <> "" then
        PrisMin = Request.Form("PrisMin")
    end if
      if Request.Form("PrisMax") <> "" then
        PrisMax =  Request.Form("PrisMax")
    end if
---
ellers har du jo lavet dem til strenge
Avatar billede hifi4all Nybegynder
29. juli 2005 - 13:45 #6
den er jeg må på, og det er gjort, men alligevel går det galt - på eller anden måde må den tolke Request.Form inputtet som IKKE-numerisk.

Jeg forsøger mig lige frem med nogle ting...
Avatar billede busschou Praktikant
29. juli 2005 - 13:47 #7
du kan jo caste det med CInt
Men det er jo et spørgsmål om hvad der står i din sql sætning, ikke om asp tolker det som en streng eller tal :o)
Avatar billede hifi4all Nybegynder
29. juli 2005 - 13:47 #8
Arrhhh...
Nu gik der et lys op - formen tillader IKKE at felterne "PrisMin eller PrisMax er tomme!
Avatar billede softspot Forsker
29. juli 2005 - 13:49 #9
busschou > jeg tror ikke det har nogen betydning om det er strenge eller tal-variable, da de bliver sammensat med SQL-strengen, hvor der sker en konvertering af typen igen - alt efter indhold. Jeg tror mere på at der ikke er talværdier i felterne fra starten...
Avatar billede busschou Praktikant
29. juli 2005 - 13:52 #10
softspot >> Det er muligt det er det at de er tomme som giver fejlen
Men der er stor forskel på om noget er Between '109' And '402' eller om det er Between 109 And 402
Ok jeg er ikke MSSQL ekspert :o)
Men normalt er der stor forskel på sammenligning af tal og strenge
Avatar billede busschou Praktikant
29. juli 2005 - 13:57 #11
hifi4all >> du kan jo bare opbygge din sql sætning afhængig af om felterne er tomme, og hvis de begge er tomme så udelade Between delen
Avatar billede softspot Forsker
29. juli 2005 - 13:57 #12
Jamen, det har du da ret i, men da hifi4all kunne gennemføre forspørgslen med querystring-aktivering, synes jeg jo ikke det skulle være det (da fortolkningen af form og querystring ser ud til at være ens)...
Avatar billede hifi4all Nybegynder
29. juli 2005 - 14:08 #13
Quote "busschou"
"du kan jo bare opbygge din sql sætning afhængig af om felterne er tomme, og hvis de begge er tomme så udelade Between delen"

Det er det jeg forsøger, da det opstår et kiks, da jeg har et annoncefelt, som er kaldet bytte - og der er der ingen mulighed for at indtaste en talværdi ved oprettelse.

Jeg vender tilbage om lidt :O)
Avatar billede hifi4all Nybegynder
29. juli 2005 - 15:35 #14
Så fik jeg det til at virke! :O)
Hvis begge felter ikke er udfyldt, springes "BETWEEN" udtrykket over.

Smider I begge et svar, så får I 50/50!
Avatar billede softspot Forsker
29. juli 2005 - 15:41 #15
Jeps! :)
Avatar billede busschou Praktikant
29. juli 2005 - 15:52 #16
jepper :o) godt det virker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester