Avatar billede termie Nybegynder
01. november 2001 - 17:02 Der er 21 kommentarer og
1 løsning

SQL problemer med streng

Hjælp jeg er kørt fast i følgende SQL strenge ifb med søgning i en database:

<%
        strDBPath = Server.MapPath(\"bolig.mdb\")
      Set cnnSearch = Server.CreateObject(\"ADODB.Connection\")
      cnnSearch.Open \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\" & strDBPath & \";\"


strSQL = \"SELECT * \" _
        & \"FROM Sag \" _
        & \"WHERE BtypeID LIKE \'%\" & Request.QueryString(\"type\") & \"%\' \" _
        & \"AND Postnr LIKE \'%\" & Request.QueryString(\"pnr\") & \"%\' \" _
        & \"AND Pris BETWEEN 1 AND \'%\" & Request.QueryString(\"pris\") & \"%\' \" _
        & \"ORDER BY ID;\"

        Set rstSearch = cnnSearch.Execute(strSQL)
%>

Jeg får følgende fejlmelding:

Error Type:
Microsoft JET Database Engine (0x80040E07)
Data type mismatch in criteria expression

Indtil videre har jeg forsøgt mig med at ændre på formatet i Databasen (tekst og Tal) og jeg har for søgt at ændre formatet (tekst og tal) på valuen i den form QueryString henter sine data fra. Men ak uden resultat.

På forhånd tak for hjælpen
Avatar billede eagleeye Praktikant
01. november 2001 - 17:48 #1
hvilke typer er: BTypeID of PostNr og Pris defineret som i din database ?
Avatar billede eagleeye Praktikant
01. november 2001 - 17:50 #2
Hvis de er defineret som tal kan du ikke bruge LIKE. Så skal du heller ikke havde \' omkring data i SQL hvis. Der skal kun \' omkring data hvor det tilhørne felt i databasen er defineret som tekst/notat.
Avatar billede termie Nybegynder
01. november 2001 - 18:01 #3
BtypeID og Postnr er tekst, disse to søgekriterier virker fint. Men Pris er tal og den virker ikke
Avatar billede termie Nybegynder
01. november 2001 - 18:01 #4
Jeg har prøvet at fjerne \' men den kommer med samme fejlmelding
Avatar billede eagleeye Praktikant
01. november 2001 - 18:03 #5
Prøv denne:

strSQL = \"SELECT * \" _
        & \"FROM Sag \" _
        & \"WHERE BtypeID LIKE \'%\" & Request.QueryString(\"type\") & \"%\' \" _
        & \"AND Postnr LIKE \'%\" & Request.QueryString(\"pnr\") & \"%\' \" _
        & \"AND Pris BETWEEN 1 AND \" & Request.QueryString(\"pris\") & \" \" _
        & \"ORDER BY ID;\"
Avatar billede termie Nybegynder
01. november 2001 - 18:52 #6
Det virker heller ikke det giver følgende fejl:

Error Type:
Microsoft JET Database Engine (0x80040E14)
Syntax error (missing operator) in query expression \'BtypeID LIKE \'%%\' AND Postnr LIKE \'%%\' AND Pris BETWEEN 1 AND\'.

Jeg har også prøvet at kommer Reguest.QueryString i en variabel og for søgt mig med at gøre den til et int() ogCint(), men uden held.
Avatar billede eagleeye Praktikant
01. november 2001 - 18:59 #7
Så får den ikke hendte nogen værdier via QueryString...Er det noget du taster ind på en form?
Avatar billede eagleeye Praktikant
01. november 2001 - 19:00 #8
Eller sagt på en anden måde: QueryString\'erne er tomme
Avatar billede eagleeye Praktikant
01. november 2001 - 19:08 #9
Hvis det kommer fra en FORM:

strSQL = \"SELECT * \" _
        & \"FROM Sag \" _
        & \"WHERE BtypeID LIKE \'%\" & Request.From(\"type\") & \"%\' \" _
        & \"AND Postnr LIKE \'%\" & Request.Form(\"pnr\") & \"%\' \" _
        & \"AND Pris BETWEEN 1 AND \" & Request.Form(\"pris\") & \" \" _
        & \"ORDER BY ID;\"
Avatar billede eagleeye Praktikant
01. november 2001 - 19:09 #10
Den \"skire\":

strSQL = \"SELECT * \" _
        & \"FROM Sag \" _
        & \"WHERE BtypeID LIKE \'%\" & Request(\"type\") & \"%\' \" _
        & \"AND Postnr LIKE \'%\" & Request(\"pnr\") & \"%\' \" _
        & \"AND Pris BETWEEN 1 AND \" & Request(\"pris\") & \" \" _
        & \"ORDER BY ID;\"
Avatar billede termie Nybegynder
01. november 2001 - 19:22 #11
Jeg kan se i den URL QUERYsTRING LAVER AT DER ER VÆRDIER i QueryString. Jeg har osse prøvet at skrive dem ud med et QueryString(Item). Og den har hvad den skal bruge , fra en form. Jeg har osse prøvet at ændrer på valuen i formen, sådan at den betragter valuen som enten tekst eller tal, uden resultat. Som sagt de to første kriterier fungerer perfekt, bare ikke den der \"pris\". Det er som om at SQL ikke forstår det er et tal, Hvis jeg feks indtaster to almene hele tal i BETWEEN kriteriet så virker det som det skal. 

\"Den Sikre\" giver:
Microsoft JET Database Engine (0x80040E14)
Syntax error (missing operator) in query expression \'BtypeID LIKE \'%%\' AND Postnr LIKE \'%%\' AND Pris BETWEEN 1 AND\'.

Og \"fra en form\" giver:

Microsoft JET Database Engine (0x80040E14)
Syntax error (missing operator) in query expression \'BtypeID LIKE \'%%\' AND Postnr LIKE \'%%\' AND Pris BETWEEN 1 AND\'

Avatar billede eagleeye Praktikant
01. november 2001 - 19:27 #12
Syntax error (missing operator) in query expression \'BtypeID LIKE \'%%\' AND Postnr LIKE \'%%\' AND Pris BETWEEN 1 AND\'

BtypeID LIKE \'%%\'  betyder at Request.QueryString(\"type\") = \"\"
Postnr LIKE \'%%\'  betybetyder at Request.QueryString(\"pnr\") = \"\"
Avatar billede termie Nybegynder
01. november 2001 - 21:04 #13
Hvis jeg nu fjerner den linie der hedder:

& \"AND Pris BETWEEN 1 AND \" & Request(\"pris\") & \" \" _

så søger den perfekt i databasen på de to forspørgsler der er. Disse to kriterier går på tekst strenge. Det går først galt når jeg  ligger den sidste linie ind.
Avatar billede eagleeye Praktikant
01. november 2001 - 21:07 #14
er det et kommatal?

så skal du måske bruge . istedet for ,
Avatar billede termie Nybegynder
01. november 2001 - 21:12 #15
Nej det er et helt tal, og jag har prøvet at komme det i en variabel som et int()
Avatar billede eagleeye Praktikant
01. november 2001 - 21:19 #16
Pris BETWEEN 1 AND\'  <----

det mangler er slut værdi i SQL...
Avatar billede termie Nybegynder
01. november 2001 - 21:34 #17
Heller ikke desværre.... Jeg har prøvet med et statement der indeholder en operator:

& \"AND Pris <= \'%\" & Request.QueryString(\"pris\") & \"%\' \" _
Det er den samme fejl der kommer frem
Avatar billede eagleeye Praktikant
01. november 2001 - 21:37 #18
Når der ikke står noget efter AND (BETWEEN 1 AND\') så får den ikke hendtet Request.QueryString(\"pris\") ritig.

Prøv at udskrive dine querystrings:
response.write \"Type:\"&Request.QueryString(\"type\")
response.write \"pnr:\"&Request.QueryString(\"pnr\")
response.write \"pris:\"&Request.QueryString(\"pris\")

Avatar billede termie Nybegynder
01. november 2001 - 23:02 #19
Ja men de strutter af indhold både ved at udskrive på din anbefalede måde og osse ved at udskrive dem med Request.QueryString(Item).

Kan det være noget så simpelt som at en sql ikke kan hente både tekst og nummeriske værdier i samme connection??
Avatar billede eagleeye Praktikant
02. november 2001 - 15:57 #20
jeg er totalt forvidret !!?!! prøv lige denne strSQL:

strSQL = \"SELECT * FROM Sag WHERE BtypeID LIKE \'%\" & Request.QueryString(\"type\") & \"%\'\"
strSQL = strSQL & \" AND Postnr LIKE \'%\" & Request.QueryString(\"pnr\") & \"%\'\"
strSQL = strSQL & \" AND Pris BETWEEN 1 AND \" & Request.QueryString(\"pris\") & \"\"
strSQL = strSQL & \" ORDER BY ID;\"


og lige bagefter
response.write (strSQL)
Avatar billede eagleeye Praktikant
02. november 2001 - 16:00 #21
>>tekst og nummeriske værdier i samme connection??
Det skulle ikke være noget problem.
Avatar billede termie Nybegynder
05. november 2001 - 08:14 #22
DU er en Helt!!!
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