Avatar billede hundevennen Nybegynder
28. marts 2006 - 13:26 Der er 13 kommentarer og
1 løsning

porblemer med sql sætning

jeg bruger dette:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<% ' Rettet 14-03-2006
Option Explicit
Response.Expires = 0
' Variabler erklæres
Dim strSQL, strWhere, var1, var2, var10, var11
' Er der klikket på submit
if len(request.ServerVariables("QUERY_STRING")) > 0 then
' Værdier hentes fra formen
var1 = request.QueryString("cbo1")
var2 = request.QueryString("cbo2")
' ......
var10 = request.QueryString("cbo10")
var11 = request.QueryString("cbo11")
' Er der krydset af
if len(var1) > 1 then
  strWhere = " sted = '" & var1 & "' and "
end if
if len(var2) > 1 then
  strWhere = strWhere & " sted = '" & var2 & "' and "
end if
'.......
if len(var10) > 1 then
  strWhere = strWhere & " bynavn = '" & var10 & "' and "
end if
if len(var11) > 1 then
  strWhere = strWhere & " bynavn = '" & var11 & "' and "
end if
' Hvis brugern ikke afkrydser noget bruger vi denne
strWhere = strWhere & " 1 = 0"
' Hvis brugereb har afkrydset fjernes linien plus det sidste and
if len(strwhere) > 7 then
  strWhere = left(strWhere,len(strWhere)-11)
end if
' SQL udtrykket
strSQL = "SELECT Sted, Bynavn FROM tblTabel WHERE " & strWhere & ";"
' Vis det på skærmen, skal udkommenteres efter prøvekørsel
response.write strSQL & "<br>"
end if
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Start</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form name="form1" method="get" action="">
<table width="100%"  border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td width="14%">Kirke</td>
    <td width="68%">Museum</td>
    <td width="9%">&nbsp;</td>
    <td width="9%">&nbsp;</td>
  </tr>
  <tr>
    <td><input name="cbo1" type="checkbox" id="cboKirke" value="Kirke"></td>
    <td><input name="cbo2" type="checkbox" id="cboMuseum" value="Museum"></td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
<br>
<table width="100%"  border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td width="14%">Roskilde</td>
    <td width="69%">Jyllinge</td>
    <td width="8%">&nbsp;</td>
    <td width="9%">&nbsp;</td>
  </tr>
  <tr>
    <td><input name="cbo10" type="checkbox" id="cboRoskilde" value="Roskilde"></td>
    <td><input name="cbo11" type="checkbox" id="cboJyllinge" value="Jyllinge"></td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td ></td>
    <td ><input type="submit" name="Submit" value="Submit"></td>
    <td >&nbsp;</td>
    <td >&nbsp;</td>
  </tr>
</table>
</form>
</body>
</html>
Avatar billede hundevennen Nybegynder
28. marts 2006 - 13:27 #1
med en tabel der hedder tblTabel med felterne stedog bynavn
Avatar billede hundevennen Nybegynder
28. marts 2006 - 13:29 #2
jeg glemte helt spm - det er når jeg afkrydser 2 steder - kommer der ikke noget, men ved afkrydsning af 1 sted virker den?
Avatar billede eagleeye Praktikant
28. marts 2006 - 16:47 #3
Nogle steder skal du bruge OR i stedet for AND:

if len(var1) > 1 then
  strWhere = " sted = '" & var1 & "' and "
end if
if len(var2) > 1 then
  strWhere = strWhere & " sted = '" & var2 & "' and "
end if


hvis man vælger både krike og museum vil SQL delen blive måske ikke ordret men i princippet:
sted='krike' and sted='museum'    dvs. sted skal være to ting på en gang. Derfor skal der OR imellem de to ting.


Så koden bliver lidt mere komplet da der stadig skal and imellem de forskellige kolonner.
Og man skal havde () med imellem for AND udføres før OR.


if len(var1) > 1 then
  strWhere = " sted = '" & var1 & "' "
end if
if len(var2) > 1 then
  if len(strWhere) > 1 then strWhere = strWhere & " OR "
  strWhere = strWhere & " sted = '" & var2 & "' "
end if
if len(strWhere) > 0 then 'Sætte () og and ind hvis der valgt noget
  strWhere = "(" & strWhere & ") and "
end if
Avatar billede hundevennen Nybegynder
28. marts 2006 - 19:36 #4
Hej eagleeye -- det var jo bare lige det - tak ska du ha
Avatar billede hundevennen Nybegynder
28. marts 2006 - 19:37 #5
nu skal jeg bare ha alle 11 checkbokse ind i sætningen og se om det virker
Avatar billede eagleeye Praktikant
28. marts 2006 - 20:33 #6
Ja der er lidt der skal ændres, jeg kan da ligge et svar på forhånd hvis du får det til at virke ;)
Avatar billede hundevennen Nybegynder
29. marts 2006 - 07:55 #7
Hej eagleeye - jeg kunne godt tænke mig at value i checkboksene var tal altså 1 istedet for kirke og 2 istedet for museum, når jegt skifter det ud og samtidig i sted feltet i dátabasen skifter ud med 1 g 2 taller for jeg intet resultat?
Avatar billede hundevennen Nybegynder
29. marts 2006 - 08:29 #8
det virker som om at det ikke du når jeg skifter tekst du med tal
Avatar billede eagleeye Praktikant
29. marts 2006 - 16:48 #9
Ok, har du rettet checkboxe på formen til tal?
    <td><input name="cbo1" type="checkbox" id="cboKirke" value="1"></td>
    <td><input name="cbo2" type="checkbox" id="cboMuseum" value="2"></td>



Er det Access eller MSSQL så skal du ikke havde ' omkring tallet i SQL sætningen:

if len(var1) > 1 then
  strWhere = " sted = " & var1 & " "
end if
if len(var2) > 1 then
  if len(strWhere) > 1 then strWhere = strWhere & " OR "
  strWhere = strWhere & " sted = " & var2 & " "
end if
if len(strWhere) > 0 then 'Sætte () og and ind hvis der valgt noget
  strWhere = "(" & strWhere & ") and "
end if



Det skulle også virke om man bruger tal eller tekst :)
Avatar billede eagleeye Praktikant
29. marts 2006 - 16:50 #10
Hvis det stadig drille så det altid en god ide at udskrive SQL sætningen for at tjekke at koden laver det man forvener, du kan jo evt. udskrive strWhere og se det bliver rigtigt.

Response.Write strWhere
Response.End 'stopper koden
Avatar billede hundevennen Nybegynder
29. marts 2006 - 18:46 #11
hej eagleeye - jeg kigger lige på det - det med at udskrive gør jeg også lige efter selve sqlsætningen - 2. linie efter :-)
Avatar billede hundevennen Nybegynder
30. marts 2006 - 08:50 #12
jeg har nu skiftet ud som du siger
if len(var1) > 1 then
  strWhere = " obj_type = " & var1 & " "
end if
if len(var2) > 1 then
  if len(strWhere) > 1 then strWhere = strWhere & " OR "
  strWhere = strWhere & " obj_type = " & var2 & " "
end if
og ændret tekst i databasen(access) til tal endvidere har jeg tilføjet
strText ="SELECT * FROM objektliste WHERE " & strWhere & ";"
' Vis det på skærmen, skal udkommenteres efter prøvekørsel
response.write strtext & "<br>"
response.write strwhere  & "<br>"
response.write var2 & "<br>"
response.write var1
response.end
når jeg submitter med afkrydsning i cbo1 får jeg så
select * fra tblTabel where 1=0
1=0
2
1

så den får altså fat i var1 og 2 fra formen, men tager den ikke med i forespørgslen???????
Avatar billede hundevennen Nybegynder
30. marts 2006 - 13:39 #13
Nå jeg fandt sørme ud af det - der skal stå if len(var1) > 0 og ikke 1 - så virker det
TAK FOR HJÆLPEN
Avatar billede hundevennen Nybegynder
03. april 2006 - 20:51 #14
Hej eagleeye - jeg har oprettet et nyt spm - i fortsættelse af dette - gider du
http://www.eksperten.dk/spm/700287
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester