webForumDet fria alternativet

IF Request i en SELECT?

12 svar · 164 visningar · startad av Jacek

JacekMedlem sedan apr. 2000169 inlägg
#1

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?

------------------
Mikael Tyrsén
</www.tyrsen.nu>
</mikael@tyrsen.nu>

LarsGMedlem sedan dec. 200012 464 inlägg
#2

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

------------------
essentitia preter non sans multiplicandum

JacekMedlem sedan apr. 2000169 inlägg
#3

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?

------------------
Mikael Tyrsén
</www.tyrsen.nu>
</mikael@tyrsen.nu>

LarsGMedlem sedan dec. 200012 464 inlägg
#4

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?

------------------
essentitia preter non sans multiplicandum

JacekMedlem sedan apr. 2000169 inlägg
#5

Kör oldschool -> microsoft access 97 :)

------------------
Mikael Tyrsén
</www.tyrsen.nu>
</mikael@tyrsen.nu>

JacekMedlem sedan apr. 2000169 inlägg
#6

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 %>

------------------
Mikael Tyrsén
</www.tyrsen.nu>
</mikael@tyrsen.nu>

[Redigerat av Jacek den 17 jan 2002]

JacekMedlem sedan apr. 2000169 inlägg
#7

ähh ett litet skit fel där men fixa det så nu funkar det! =) *klant*

------------------
Mikael Tyrsén
</www.tyrsen.nu>
</mikael@tyrsen.nu>

JacekMedlem sedan apr. 2000169 inlägg
#8

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

------------------
Mikael Tyrsén
</www.tyrsen.nu>
</mikael@tyrsen.nu>

[Redigerat av Jacek den 17 jan 2002]

Andreas LMedlem sedan sep. 2000215 inlägg
#9

Ä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]

LarsGMedlem sedan dec. 200012 464 inlägg
#10

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)

------------------
essentitia preter non sans multiplicandum

Andreas LMedlem sedan sep. 2000215 inlägg
#11

SLÖLASSE!!! ;) *hehe*

------------------
"Life's a bitch who sucks... then you marry one who doesn't"

JacekMedlem sedan apr. 2000169 inlägg
#12

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")%>&nbsp;<%= 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">&nbsp;</td>
          <td>&nbsp;</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>

------------------
Mikael Tyrsén
</www.tyrsen.nu>
</mikael@tyrsen.nu>

JacekMedlem sedan apr. 2000169 inlägg
#13

Löste problemet..
Det ni sa var rätt, men det var en massa massa små fel av mig..!

Tack

------------------
Mikael Tyrsén
</www.tyrsen.nu>
</mikael@tyrsen.nu>

[Redigerat av Jacek den 17 jan 2002]

134 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)