Jo, det går. är det inte enklare att lägga den if-satsen i ditt skript?
if request.form("kundid") = "alla" then
sql = "select ..."
else
sql = "select ..."
end if
12 svar · 166 visningar · startad av Jacek
Går dett att fixa i en SELECT att om värdet på request.form("KundId") är lika med "alla" skall snutten i select Kund = '" & KundId & "' förvinna..
Typ som att slänga in en if-sats..
Nån som hajja?
Jo, det går. är det inte enklare att lägga den if-satsen i ditt skript?
if request.form("kundid") = "alla" then
sql = "select ..."
else
sql = "select ..."
end if
Jo men jag har 3 val som kan vara antingen alla eller ett visst värde.
Användare
Kund
Projekt
Och då blir det ju ett antal, så det var därför jag undra om det kanske finns en anna utväg?
En anledning till att jag inte skrev någon SQL är att syntaxen beror på vilken databashanterare man använder, tyvärr. Det finns åtminstone 3 olika varianter som jag känner till.
Vilken dbms använder du?
Kör oldschool -> microsoft access 97
Testade detta med det funka inte!
<% If Anvandare = "alla" AND Kunder = "alla" Then %>
1
<% ElseIf Anvandare = "alla" AND NOT Kunder = "alla" AND Projekt = "alla" Then %>
2
<% ElseIf Anvandare = "alla" AND NOT Kunder = "alla" AND NOT Projekt = "alla" Then %>
3
<% ElseIf NOT Anvandare = "alla" AND Kunder = "alla" Then %>
4
<% ElseIf NOT Anvandare = "alla" AND NOT Kunder = "alla" AND Projekt = "alla" Then %>
5
<% ElseIf NOT Anvandare = "alla" AND NOT Kunder = "alla" AND NOT Projekt = "alla" Then %>
6
<% End IF %>
ähh ett litet skit fel där men fixa det så nu funkar det! =) *klant*
Nu när jag gör som du menat lars så får jag ingen felmeddelande men sidan blir lixom som försvunnen..
Ända gången det fungerar är när inget av de 3 fälten visar alla (den sista if-satsen).
If Anvandare = "alla" AND Kunder = "alla" Then
SQL = "Select sum(TimmarAntal) as Summa FROM Timmar Where TimmarDatum BETWEEN '" & DatumFran & "' AND '" & DatumTill & "'"
Set RsSumma = Conn.Execute(SQL)
ElseIf Anvandare = "alla" AND NOT Kunder = "alla" AND Projekt = "alla" Then
SQL = "Select sum(TimmarAntal) as Summa FROM Timmar Where TimmarKundId = '" & Kunder & "' AND TimmarDatum BETWEEN '" & DatumFran & "' AND '" & DatumTill & "'"
Set RsSumma = Conn.Execute(SQL)
ElseIf Anvandare = "alla" AND NOT Kunder = "alla" AND NOT Projekt = "alla" Then
SQL = "Select sum(TimmarAntal) as Summa FROM Timmar Where TimmarKundId = '" & Kunder & "' AND TimmarProjektId = '" & Projekt & "' AND TimmarDatum BETWEEN '" & DatumFran & "' AND '" & DatumTill & "'"
Set RsSumma = Conn.Execute(SQL)
ElseIf NOT Anvandare = "alla" AND Kunder = "alla" Then
SQL = "Select sum(TimmarAntal) as Summa FROM Timmar Where TimmarUserId = '" & Anvandare & "' AND TimmarDatum BETWEEN '" & DatumFran & "' AND '" & DatumTill & "'"
Set RsSumma = Conn.Execute(SQL)
ElseIf NOT Anvandare = "alla" AND NOT Kunder = "alla" AND Projekt = "alla" Then
SQL = "Select sum(TimmarAntal) as Summa FROM Timmar Where TimmarUserId = '" & Anvandare & "' AND TimmarKundId = '" & Kunder & "' AND TimmarDatum BETWEEN '" & DatumFran & "' AND '" & DatumTill & "'"
Set RsSumma = Conn.Execute(SQL)
ElseIf NOT Anvandare = "alla" AND NOT Kunder = "alla" AND NOT Projekt = "alla" Then
SQL = "Select sum(TimmarAntal) as Summa FROM Timmar Where TimmarUserId = '" & Anvandare & "' AND TimmarKundId = '" & Kunder & "' AND TimmarProjektId = '" & Projekt & "' AND TimmarDatum BETWEEN '" & DatumFran & "' AND '" & DatumTill & "'"
Set RsSumma = Conn.Execute(SQL)
End IF
Äh...
Jag kanske missförstår dig, men är det inte så att det kan vara på endast TVÅ sätt?
Antingen så är request.form("KundId") = "alla"
eller så är det INTE lika med "alla" ?
Gör precis som LarsG säger:
If request.form("KundId") ="alla" then
'valet "alla" är marketat
stm = "SELECT..."
else
'ett kundid skickas med och skall användas för filtrering
stm = "SELECT..."
End if
Tänkte på en annan sak. Om du har flera saker som kan ha värdet "alla" eller en specifik siffra så kan du bygga upp din sqlsyntax dynamiskt. Ungefär såhär:
stm = "SELECT... "
IF request.form("KundId") <> "alla" then stm = stm & " AND kundid = "&request.form("KundId")
IF request.form("användare") <> "alla" then stm = stm & " AND användarid = "&request.form("användare")
'och så vidare. Tänk på att det kanske blir
'radbrytningar när du läser det här i forumet
Skriv alltid ut din sql-sträng och kolla hur den ser ut innan du kör den i databasen
...eller "hajja" jag inte?
[Redigerat av Andreas L den 17 jan 2002]
Om du har flera olika villkor så
SQL = "Select sum(TimmarAntal) as Summa FROM Timmar Where TimmarDatum BETWEEN '" & DatumFran & "' AND '" & DatumTill & "' "
If Anvandare <> "alla" then
SQL = sql & "and TimmarUserid = '" & anvandare & "' "
end if
If Kunder <> "alla" Then
SQL = sql & " and TimmarKundId = '" & Kunder & "'"
end if
If Projekt <> "alla" then
SQL = sql & " and TimmarProjektId = '" & Projekt & "' "
end if
Set RsSumma = Conn.Execute(SQL)
SLÖLASSE!!! *hehe*
Hmm det funka ändå inte.. något skumt är det slänger upp hela koden så kan ni kolla.
<%
Anvandare = Request.Form("Anvandare")
Kunder = Request.Form("Kunder")
Projekt = Request.Form("Projekt")
DatumFran = Request.Form("DatumFran")
DatumTill = Request.Form("DatumTill")
' ############# DATABAS KOPPLING #####################
set conn=server.createobject("adodb.connection")
path="DBQ=" & server.mappath("../../db/p6intranet.mdb")
conn.open "driver={microsoft access driver (*.mdb)}; " & path,"name","name"
' ############# ANVÄNDARE #####################
SQL = "SELECT * FROM User Where UserId =" & Request("Anvandare")
SQL = SQL & " Order by UserId"
Set RsUser = Conn.Execute(SQL)
' ############# KUND #####################
SQL = "SELECT * FROM Kund Where KundId =" & Request("Kunder")
SQL = SQL & " Order by KundId"
Set RsKund = Conn.Execute(SQL)
' ############# Projekt #####################
SQL = "SELECT * FROM Projekt Where ProjektId =" & Request("Projekt")
SQL = SQL & " Order by ProjektId"
Set RsProjekt = Conn.Execute(SQL)
' ############# Timmar #####################
SQL = "Select sum(TimmarAntal) as Summa FROM Timmar Where TimmarDatum BETWEEN '" & DatumFran & "' AND '" & DatumTill & "' "
If Anvandare <> "alla" then
SQL = sql & "and TimmarUserid = '" & Anvandare & "' "
end if
If Projekt <> "alla" then
SQL = sql & " and TimmarProjektId = '" & Projekt & "' "
end if
If Kunder <> "alla" Then
SQL = sql & " and TimmarKundId = '" & Kunder & "'"
end if
Set RsSumma = Conn.Execute(SQL)
%>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="../../style.css" type="text/css">
</head>
<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<table width="100%" border="0" cellspacing="0" cellpadding="0" height="100%">
<tr>
<td align="center" valign="middle">
<table width="400" border="0" cellspacing="0" cellpadding="5">
<tr>
<td width="71">Namn</td>
<td><b><%= RsUser("UserNamn")%> <%= RsUser("UserEfternamn")%></b></td>
</tr>
<tr>
<td width="71">Kund</td>
<td><b><%= RsKund("KundNamn")%></b></td>
</tr>
<tr>
<td width="71">Projekt</td>
<td><b><%= RsProjekt("ProjektNamn")%></b></td>
</tr>
<tr>
<td width="71">Datum</td>
<td><b><%= DatumFran %> - <%= DatumTill %></b></td>
</tr>
<tr>
<td width="71"> </td>
<td> </td>
</tr>
<tr>
<td width="71">Timmar</td>
<td><b>
<% If isnull(RsSumma("Summa")) Then %>
0,0
<% else %>
<%= FormatNumber(RsSumma("Summa"),1)%>
<% End If %> Timmar</b></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>