webForumDet fria alternativet

skicka sql med variabel???

ASP

4 svar · 697 visningar · startad av Biasse

Medlem sedan aug. 2003480 inlägg
Frågan#1

Är det möjligt att skicka en sql via en varabel? Lite ex hur jag menar men får felet:
Feltyp:
Microsoft JET Database Engine (0x80040E14)
Ogiltigt SQL-uttryck. 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' eller 'UPDATE' förväntades.

<%
kommande = Connect.Execute("SELECT * From kalender WHERE bokad < 4 AND datum > #"& date() &"# ORDER BY datum ASC")
bokningar = Connect.Execute("SELECT * From kalender WHERE bokad = 1 ORDER BY datum ASC")
alla = Connect.Execute("SELECT * From kalender WHERE bokad < 4 ORDER BY datum ASC")
plusEtt = "SELECT * From kalender WHERE bokad < 4 AND year(datum) = '"& Year(date)+1 &"' ORDER BY datum ASC"
dagensAr = Connect.Execute("SELECT * From kalender WHERE bokad < 4 AND year(datum) = '"& Year(date) &"' ORDER BY datum ASC")
minusEtt = Connect.Execute("SELECT * From kalender WHERE bokad < 4 AND year(datum) = '"& Year(date)-1 &"' ORDER BY datum ASC")
minusTva = Connect.Execute("SELECT * From kalender WHERE bokad < 4 AND year(datum) = '"& Year(date)-2 &"' ORDER BY datum ASC")
minusTre = Connect.Execute("SELECT * From kalender WHERE bokad < 4 AND year(datum) = '"& Year(date)-3 &"' ORDER BY datum ASC")
%>
  
  <tr>
    <td align="center">
    <form action="admin_kommande.asp?action=check" method="post">    
    <Select name="valtAr" style="font-family: verdana; font-size: 10px">
    <option value="#">&nbsp;Välj&nbsp;</option>
    <Option value="<%=kommande%>">Kommande</Option>
    <Option value="<%=bokningar%>">Preliminära</Option>
    <Option value="<%=alla%>">Alla</Option>
    <Option value="<%=plusEtt%></Option>
    <Option value="<%=dagensAr%>"><%=Year(date)%></Option>
    <Option value="<%=minusEtt%>"><%=Year(date)-1%></Option>
    <Option value="<%=minusTva%>"><%=Year(date)-2%></Option>
    <Option value="<%=minusTre%>"><%=Year(date)-3%></Option>
    </Select>
    <input type="submit" style="font-family: verdana; font-size: 10px" name="Submit2" value="&nbsp;Hämta År&nbsp;">        
    </td>
  </tr>

Sen var tanken att hämta ut det som en sql via detta

SQL = Request.Form("valtAr")
Set RecSet = Server.CreateObject("ADODB.Recordset")
 
oldAction=Request.Querystring("action")

RecSet.Open SQL, Connect, 1, 3
RecSet.PageSize = 20

If RecSet.EOF Then

osv...
Medlem sedan okt. 2007446 inlägg
#2

för det första så har du ju satt
minusEtt = Connect.Execute("SELECT * From kalender WHERE bokad < 4 AND year(datum) = '"& Year(date)-1 &"' ORDER BY datum ASC"), dvs minusEtt är ett recordset

Sen verkar det lite onödigt att skriva ut hela SQL-frågan i klartext i dina options

jag skulle satt värdena på option till en siffra och sen

Select Case Clng(Request.Form("valtAr"))
 Case 1
  'Kommande
   SQL="SELECT * From kalender WHERE bokad < 4 AND datum > #"& date() &"# ORDER BY datum ASC"
 Case 2
  'bokningar
  SQL="SELECT * From kalender WHERE bokad = 1 ORDER BY datum ASC"

End Select

Set RS=Connect.Execute(SQL)
Medlem sedan aug. 2003480 inlägg
#3

Fick till det såhär tillslut :)

<%
kommande = "SELECT * From kalender WHERE bokad < 4 AND datum > #"& date() &"# ORDER BY datum ASC"
nya      = "SELECT * From kalender WHERE bokad = 1 ORDER BY datum ASC"
alla     = "SELECT * From kalender WHERE bokad < 4 ORDER BY datum ASC"
plusEtt  = "SELECT * From kalender WHERE bokad < 4 AND year(datum) = '"& Year(date)+1 &"' ORDER BY datum ASC"
dagensAr = "SELECT * From kalender WHERE bokad < 4 AND year(datum) = '"& Year(date) &"' ORDER BY datum ASC"
minusEtt = "SELECT * From kalender WHERE bokad < 4 AND year(datum) = '"& Year(date)-1 &"' ORDER BY datum ASC"
minusTva = "SELECT * From kalender WHERE bokad < 4 AND year(datum) = '"& Year(date)-2 &"' ORDER BY datum ASC"
minusTre = "SELECT * From kalender WHERE bokad < 4 AND year(datum) = '"& Year(date)-3 &"' ORDER BY datum ASC"

'//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////'
%>
  
  <tr>
    <td align="center">
    <form action="admin_kommande.asp?kolla=check" method="post">    
    <Select name="valtAr" style="font-family: verdana; font-size: 10px">
    <option value="#">&nbsp;Välj&nbsp;</option>
    <Option value="<%=kommande%>">Kommande</Option>
    <Option value="<%=nya%>">Preliminära</Option>
    <Option value="<%=alla%>">Alla</Option>
    <Option value="<%=plusEtt%>"><%=Year(date)+1%></Option>
    <Option value="<%=dagensAr%>"><%=Year(date)%></Option>
    <Option value="<%=minusEtt%>"><%=Year(date)-1%></Option>
    <Option value="<%=minusTva%>"><%=Year(date)-2%></Option>
    <Option value="<%=minusTre%>"><%=Year(date)-3%></Option>
    </Select>
    <input type="submit" style="font-family: verdana; font-size: 10px" name="Submit2" value="&nbsp;Hämta År&nbsp;">        
    </td>
  </tr>

  SQL = Request.Form("valtAr")
Medlem sedan okt. 2007446 inlägg
#4

Det där funkar ju, men som jag skrev, varför ha hela sql-frågan som variabel?

Det enda som skiljer de olika fallen åt är ju vad som står mellan "WHERE bokad" och "ORDER BY datum" (du behöver inte ha med ASC, eftersom det är default)
jag skulle gjort en variant på mitt förslag där du då endast ändrar på ditt villkor

If  Clng(Request.Form("valtAr"))>0 Then
Select Case Clng(Request.Form("valtAr"))
 Case 1
  'Kommande
   villkor="bokad < 4 AND datum > #"& date() &"#"
 Case 2
  'bokningar
  villkor="bokad = 1"

End Select

SQL="SELECT * From kalender WHERE "& villkor &" ORDER BY datum"

End If

och

    <Select name="valtAr" style="font-family: verdana; font-size: 10px">
    <option value="0">&nbsp;Välj&nbsp;</option>
    <Option value="1">Kommande</Option>
    <Option value="2">Preliminära</Option>
    <Option value="3">Alla</Option>
    <Option value="4"><%=Year(date)+1%></Option>
    <Option value="5"><%=Year(date)%></Option>
    osv
    </Select>
Medlem sedan aug. 2003480 inlägg
#5

Ja du har helt rätt. Fick ditt förslag att fungera perfekt. Tack :)

<Select name="valtAr" style="font-family: verdana; font-size: 10px">
    <option value="#">&nbsp;Välj&nbsp;</option>
    <Option value="1">Kommande</Option>
    <Option value="2">Preliminära</Option>
    <Option value="3">Alla</Option>
    <Option value="4"><%=Year(date)+1%></Option>
    <Option value="5"><%=Year(date)%></Option>
    <Option value="6"><%=Year(date)-1%></Option>
    <Option value="7"><%=Year(date)-2%></Option>
    <Option value="8"><%=Year(date)-3%></Option>
    </Select>

och

If Request.Form("valtAr") > 0 Then

Select Case Request.Form("valtAr") 
  Case 1   '///// Kommande /////'
    choiseSQL = "bokad < 4 AND datum > #"& date() &"#"
  Case 2   '///// Nya Bokningar /////'
    choiseSQL = "bokad = 1"
  Case 3   '///// Alla Bokningar /////'
    choiseSQL = "bokad < 4"
  Case 4   '///// Plus 1 År /////'
    choiseSQL = "bokad < 4 AND year(datum) = '"& Year(date)+1 &"'"
  Case 5   '///// Nuvarande År /////'
    choiseSQL = "bokad < 4 AND year(datum) = '"& Year(date) &"'"
  Case 6   '///// Minus 1 År /////'
    choiseSQL = "bokad < 4 AND year(datum) = '"& Year(date)-1 &"'"
  Case 7   '///// Minus 2 År /////'
    choiseSQL = "bokad < 4 AND year(datum) = '"& Year(date)-2 &"'"
  Case 8   '///// Minus 3 År /////'
    choiseSQL = "bokad < 4 AND year(datum) = '"& Year(date)-3 &"'"
End Select

SQL="SELECT * From kalender WHERE "& choiseSQL &" ORDER BY datum"

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