Frågan 16 okt. 2001 15:28 #1 OM man har ett sökformulär med ett par olika alternativ. Om man väljer att inte fylla i något i formulären vill jag att i SQL-frågan bortser från alternativet.
Exempel om jag på sökformuläret har två rutor Namn och ålder. Jag fyller bara i ålder. då vill jag att alla med den aldern ska visas.
Denna rad i sokfragan ska alltså inte vara med where namn = "& namn &"
------------------
Adde
L LarsG Medlem sedan dec. 2000 12 464 inlägg sql = "select * from ogrish where 1 = 1 "
if request.form("namn") <> "" then
namn = "'" & replace(namn,"'","''") & "'"
sql = sql & " and namn = " & namn
end if
if request.form("alder") <> "" then
sql = sql & " and alder = " & request.form("alder")
end if
------------------
essentitia preter non sans multiplicandum
Brimba Medlem sedan dec. 1999 5 874 inlägg bygg sqlfrågan utifrån vad du får.
<%
If request.form("age") = "" AND request.form("name") = "" Then
where = ""
else
where = "where"
End If
If request.form("age") = "" Then
age = ""
else
age = "age ="
End If
%>
sedan så....
sql = "select * from tbl " & where & age
osv..
------------------
Mvh
Patrik aka Brimba
<A HREF="http://www.brimba.nu/default.asp?oPID=poll&PollID=20 " TARGET=_blank>Har du husdjur hemma?
</A>Varför får man inte dricka saltvatten?
Nu blev det snurrigt så här ser min kod ut nu
dim kon, sprak, staus, hemvist, karaktar, alder
'Hämta värden
kon = cINT( Request( "kon" ) )
sprak = cINT( Request( "sprak" ) )
hemvist = cINT( Request( "hemvist" ) )
karaktar = cINT( Request( "karaktar" ) )
alder =cINT( Request( "alder" ) )
Set rosterRS = Server.CreateObject( "ADODB.Recordset" )
rosterRS.ActiveConnection = Con
sqlString = "SELECT rost_kod, rost_sprak, rost_hemvist, rost_kon, rost_alder, rost_karaktar, rost_fil, sprak_svenska, land_svenska " &_
"FROM roster, sprak, land " &_
"WHERE rost_status=1 " &_
"AND rost_hemvist = " & hemvist & " " &_
"AND rost_karaktar = " & karaktar & " " &_
"AND rost_alder = " & alder & " " &_
"AND rost_sprak = " & sprak & " " &_
"AND rost_kon = " & kon & " " &_
"AND land_id = rost_hemvist " &_
"AND sprak_id = rost_sprak " &_
" ORDER by rost_kod DESC"
SET rosterRS = Con.Execute( sqlString )
------------------
Adde
L LarsG Medlem sedan dec. 2000 12 464 inlägg sqlString = "SELECT rost_kod, rost_sprak, rost_hemvist, rost_kon, rost_alder, rost_karaktar, rost_fil, sprak_svenska, land_svenska " &_
"FROM roster, sprak, land " &_
"WHERE rost_status=1 "
"AND rost_hemvist = " & hemvist & " "
if karaktar <> "" then
sqlstring = sqlstring & _
"AND rost_karaktar = " & karaktar & " "
end if
if alder <> "" then
sqlstring = sqlstring & _
"AND rost_alder = " & alder & " "
end if
sqlstring = sqlstring & _
"AND land_id = rost_hemvist " &_
"AND sprak_id = rost_sprak " &_
"AND rost_sprak = " & sprak & " " &_
"AND rost_kon = " & kon & " " &_
" ORDER by rost_kod DESC"
SET rosterRS = Con.Execute( sqlString
Du får väl anpassa lite beroende på vilka fält som är obligatoriska eller inte.
------------------
essentitia preter non sans multiplicandum
Jag får inga poster uppradade.
sqlString = "SELECT rost_kod, rost_sprak, rost_hemvist, rost_kon, rost_alder, rost_karaktar, rost_fil, sprak_svenska, land_svenska " &_
"FROM roster, sprak, land " &_
"WHERE rost_status=1 "
if karaktar <> "" then
sqlstring = sqlstring & _
"AND rost_karaktar = " & karaktar & " "
end if
if hemvist <> "" then
sqlstring = sqlstring & _
"AND rost_hemvist = " & hemvist & " "
end if
if sprak <> "" then
sqlstring = sqlstring & _
"AND rost_sprak = " & sprak & " "
end if
if kon <> "" then
sqlstring = sqlstring & _
"AND rost_kon = " & kon & " "
end if
if alder <> "" then
sqlstring = sqlstring & _
"AND rost_alder = " & alder & " "
end if
sqlstring = sqlstring & _
"AND land_id = rost_hemvist " &_
"AND sprak_id = rost_sprak " &_
" ORDER by rost_kod DESC"
SET rosterRS = Con.Execute( sqlString )
------------------
Adde
L LarsG Medlem sedan dec. 2000 12 464 inlägg Du kan ju börja med att testa utan att fylla i några villkor alls och ta den sql-fråga som du får och testa den separat.
Sen så får du sätta fler villkor och kontrollera att sql-satsen ser riktig ut.
------------------
essentitia preter non sans multiplicandum
Jag har prövat det.
Om jag väljer att bara ta med detta i koden.
sqlString = "SELECT rost_kod, rost_sprak, rost_hemvist, rost_kon, rost_alder, rost_karaktar, rost_fil, sprak_svenska, land_svenska " &_
"FROM roster, sprak, land " &_
"WHERE rost_status=1 "
if kon <> "" then
sqlstring = sqlstring & _
"AND rost_kon = " & kon & " "
end if
sqlstring = sqlstring & _
"AND land_id = rost_hemvist " &_
"AND sprak_id = rost_sprak " &_
" ORDER by rost_kod DESC"
SET rosterRS = Con.Execute( sqlString )
Om kon = 1 så radar den upp två poster men om kon = "" så radar den inte upp några poster när den borde rada upp 4 st poster.
------------------
Adde
[Redigerat av Addeladde den 16 okt 2001]
:) Löste det! När man använder cINT tilldelas variabeln 0 om det är NULL.
Alltså ska det stå IF alder <> 0
så enkelt var det. Tack för all hjälp Lasse
------------------
Adde