webForumDet fria alternativet

Om inte en är vald?

ASP

33 svar · 1 427 visningar · startad av parse · sida 2 av 2

Frågan, av parse

Hej! Jag hämtar data ur e databas genom tre querystrings. Dvs, ?a=1&b=2&c=3 Då hämtas alla tre, men om man inte väljer med &b= får man ett felmeddelande. Hur gör jag så att man ska kunna välja vilka kombinationer som helst? tillexempel ?a=stockholm&c=d eller ?c=e&b=sverige osv osv

Läs frågan i sin helhet →
Medlem sedan juli 200826 inlägg
#21

Jo, det förstår jag. Men jag får ändå felmedelande.

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error in ORDER BY clause.

Medlem sedan juni 200032 967 inlägg
#22

Då vill vi se hela koden som genererar SQL-frågan, och allra helst den färdiga SQL-frågan.

Medlem sedan juli 200826 inlägg
#23
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("p.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT * FROM p WHERE title LIKE '%%" & Request.Form("sok") & "%%' AND c = '"& Request.Form("c") &"' AND s = '" & Request.Cookies ("s") & "'   AND p BETWEEN " & CLng(Request.Form("f")) & " AND "& CLng(Request.Form("t")) &" "

If Len(Request.Form("y"))>0 Then
   strSQL = strSQL & " AND y = " & CLng(Request.Form("y"))
End If
If Len(Request.Form("a"))>0 Then
 strSQL = strSQL & " AND a = '" & SafeParam(Request.Form("a")) & "' ORDER BY id DESC"
End If
If Len(Request.Form("f"))>0 Then
   strSQL = strSQL & " AND f = '" & SafeParam(Request.Form("f")) & "'"
End If
If Len(Request.Form("m"))>0 Then
   strSQL = strSQL & " AND m = '" & SafeParam(Request.Form("m")) & "'"
End If
Medlem sedan juni 200032 967 inlägg
#24

Order by ska vara sist. Kan det inte hända att du skickar f och / eller m om du skickar a?

Om du skriver ut SQL-frågan istället för att exekvera den är det lättare för dig att se vad som är fel.

Medlem sedan juli 200826 inlägg
#25

@nders skrev:

Om du skriver ut SQL-frågan istället för att exekvera den är det lättare för dig att se vad som är fel.

Hur gör jag det?

Medlem sedan dec. 20025 483 inlägg
#26

response.write strSql
response.end

Medlem sedan juni 200032 967 inlägg
#27

edit: det fanns visst ett inlägg på sida 2 också - vilket gör detta inlägg onödigt.

Medlem sedan juli 200826 inlägg
#28

SELECT * FROM p WHERE title LIKE '%%%%' AND c = 'test' AND state = '1' AND p BETWEEN 10000000 AND 1 AND a = 1

Får felmedelande och inget kommer upp ifall jag har med ORDER BY.

Medlem sedan nov. 2002830 inlägg
#29

edit: Missade sida 2.. :r

Medlem sedan nov. 2002830 inlägg
#30

Är a en int? Har du valt rätt fält att ordna via?

SELECT * FROM p WHERE title LIKE '%%%%' AND c = 'test' AND state = '1' AND p BETWEEN 10000000 AND 1 AND a = 1 ORDER BY fält

Medlem sedan juli 200826 inlägg
#31

Sasch skrev:

Är a en int? Har du valt rätt fält att ordna via?

SELECT * FROM p WHERE title LIKE '%%%%' AND c = 'test' AND state = '1' AND p BETWEEN 10000000 AND 1 AND a = 1 ORDER BY fält

A är number. Jag har ORDER BY id.

Medlem sedan juni 200032 967 inlägg
#32

Får felmedelande och inget kommer upp ifall jag har med ORDER BY.

Då är jag intresserad av hur din kod ser ut när detta inträffar.

Medlem sedan juli 200826 inlägg
#33

Det är otroligt skumt, nu får jag inget felmedelande alls, men det sorteras inte heller.
Jag tror de beror på att vi har 4st If Len längst ner som stryper order by?

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("p.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT * FROM p WHERE title LIKE '%%" & Request.Form("sok") & "%%' AND c = '"& Request.Form("c") &"' AND s = '" & Request.Cookies ("s") & "'   AND p BETWEEN " & CLng(Request.Form("f")) & " AND "& CLng(Request.Form("t")) &" "

If Len(Request.Form("y"))>0 Then
   strSQL = strSQL & " AND y = " & CLng(Request.Form("y"))
End If
If Len(Request.Form("a"))>0 Then
 strSQL = strSQL & " AND a = '" & SafeParam(Request.Form("a")) & "' ORDER BY id DESC"
End If
If Len(Request.Form("f"))>0 Then
   strSQL = strSQL & " AND f = '" & SafeParam(Request.Form("f")) & "'"
End If
If Len(Request.Form("m"))>0 Then
   strSQL = strSQL & " AND m = '" & SafeParam(Request.Form("m")) & "'"
End If
Medlem sedan juni 20019 519 inlägg
#34

Flytta ner:

If Len(Request.Form("a"))>0 Then
 strSQL = strSQL & " AND a = '" & SafeParam(Request.Form("a")) & "' ORDER BY id DESC"
End If

eftersom ORDER BY skall komma efter WHERE, om du nu har a och m så kommer din SQL fråga bli fel.

Skriv ut din SQL fråga och postar den så får alla se hur SQL frågan ser ut när den genereras ut.

265 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)