SQL-sætning, der får PWS til at gå helt ned
Jeg har problemer med en SQL-forespørgsel med "OR". Prøv eksemplet på "greenguides.dk/menu/findgg/ggsearch.asp" og vælg at søge "enten-eller", "Projekttitel" og på ordene "forbruger håndværk". En AND-søgning virker OK, mens en OR søgning får PWS til at gå ned og ikke genstartes. På webhotellet kan I jo selv se det besynderlige resultat.Der bruges 1 database med 2 forskellige tabeller i SQL-sætningen, der i øvrigt også kan ses øverst på siden.
------------
Kildekoden ser således ud:
<%' Option Explicit%>
<%Response.buffer=True%>
<%Response.expires=0%>
<!-- #include virtual="common/adovbs.inc" -->
<%
' 1 variabler SKAL defineres - linien skal stå oeverst
' 2 og hele siden skal koeres igennem foer udskrift i browseren
' 3 og siden maa ikke caches
' 4 inkluderer alle VBS-konstanter
%>
<HTML>
<HEAD>
<TITLE>Søg efter din grønne guide</TITLE>
<META http-equiv=CONTENT-TYPE content="text/html; charset=iso-8859-1">
<META name=KEYWORDS content="green, guide, advisor, environment, grøn, Danmark, miljø, protection, bio, biology, health, nutrition, agenda, ngo, fond, local, groundwater, grün, grünen, helfer, umweltschütz, umweltbewusstsein">
<META name=DESCRIPTION content="Søgeside for de grønne guider">
<META name=GENERATOR content="Dreamweaver 2.01">
<LINK rel="stylesheet" href="../../common/side2styles.css">
</HEAD>
<BODY link="#0000FF" vlink="#800080" text="#000000" background="../../images/page3_back.gif">
<!-- Her starter et logoscript i nederste højre hjørne-->
<SCRIPT language=JAVASCRIPT src="../../common/staticlogo2_dk.js"></SCRIPT>
<!-- Her slutter logoscriptet-->
<DIV id="Emnebillede" style="position: absolute; left: 12px; top: 31px; width: 141px; height: 120px; z-index: 1; text-align: left; visibility: visible"><IMG height=120 width=141
src="../../images/findgg_b.gif" border=0 alt="Find din lokale grønne guide" ></DIV>
<%
' Første gang siden hentes eller hver gang den sendes uden at være udfyldt
' vil formularen blive vist. Hvis den sendes EFTER at være blevet korrekt udfyldt
' vil formulardataene blive checket i "Else-delen".
If Request("SType")="" Or Request("SValue")="" Or _
Request("Field")="" Then
%>
<DIV id="Overskrift1" style="position: absolute; left: 179px; top: 81px; width: 418px; height: 35px; z-index: 2; text-align: left; visibility: visible">
<DIV align="center" class="Overskrift-A">Søg efter din lokale grønne guide <%=strTableName%></DIV>
</DIV>
<DIV id="Soegeformular" style="position:absolute; left:179px; top:131px; width:418px; height:290px; z-index:3; visibility: visible" class="Brød-alm">
<P align="center"><SPAN class="Brød-stor">Søgeformular </SPAN><!---------- Her har vi først vores søgeformular ------->
<FORM method=POST action="ggsearch.asp" name="SeachForm">
<TABLE width="325" border="0" height="200">
<TR>
<TD width="15%"> </TD>
<TD width="2%"> </TD>
<TD width="38%"> </TD>
</TR>
<TR>
<TD width="15%" class="Brød-alm">Søgekriterium</TD>
<TD width="2%"> </TD>
<TD width="38%">
<DIV align="right">
<SELECT name="SType" size="1">
<OPTION value="AllWords" selected>Alt</OPTION>
<OPTION value="AnyWords">Enten eller</OPTION>
</SELECT>
</DIV>
</TD>
</TR>
<TR>
<TD width="15%" class="Brød-alm">Søgefelt</TD>
<TD width="2%"> </TD>
<TD width="38%">
<DIV align="right">
<SELECT name="Field" size="1">
<OPTION value="Projekttitel" selected>Projekttitel</OPTION>
<OPTION value="Efternavn">Efternavn</OPTION>
<OPTION value="Fornavn">Fornavn</OPTION>
<OPTION value="Byarbejde">By</OPTION>
</SELECT>
</DIV>
</TD>
</TR>
<TR>
<TD width="15%" class="Brød-alm">Sortering</TD>
<TD width="2%"> </TD>
<TD width="38%">
<DIV align="right">
<SELECT name="OrderBy" size="1">
<OPTION value="Projekttitel" selected>Projekttitel</OPTION>
<OPTION value="Efternavn">Efternavn</OPTION>
<OPTION value="Byarbejde">By</OPTION>
</SELECT>
</DIV>
</TD>
</TR>
<TR>
<TD width="15%" class="Brød-alm">Søgetekst</TD>
<TD colspan="2">
<DIV align="right">
<INPUT type=TEXT name="SValue" size=40>
</DIV>
</TD>
</TR>
<TR>
<TD width="15%"> </TD>
<TD width="2%"> </TD>
<TD width="38%"> </TD>
</TR>
<TR>
<TD width="15%" height="14"> </TD>
<TD width="2%" height="14"> </TD>
<TD width="38%" height="14">
<DIV align="center">
<INPUT type=SUBMIT name="SØG" value="Søg nu">
<INPUT type="reset" name="Cancel" value="Ryd Feltet">
</DIV>
</TD>
</TR>
<TR>
<TD width="15%"> </TD>
<TD width="2%"> </TD>
<TD width="38%">
<INPUT type=HIDDEN name="Table" value="Adresser">
<INPUT type=HIDDEN name="Table2" value="Beskrivelser">
<!----------
<INPUT type=HIDDEN name="SType2" value="AllWords">
<INPUT type=HIDDEN name="Field2" value="CustomerName">
<INPUT type=HIDDEN name="Table" value="Customer">
<INPUT type=HIDDEN name="OrderBy2" value="Customer">
---------->
</TD>
</TR>
</TABLE>
<DIV align="center"></DIV>
<P>
</FORM>
<!----------- Her slutter soegeformularen ---------->
</DIV>
<%Else%>
<%
DIM dbConn, SQL, SValue, SType, strFieldName, strTableName, strTableName2, strOrderByField, _
Wordcounter, Currentword, rsRecords, i, SQL1
%>
<%
' Her angives hvilken tabel, der skal soeges i,
' og hvilke felter der skal soeges i,
' og om der eventuelt skal sorteres efter et felt
' Request (querystring er underforstået)
strFieldName = Request("Field")
strTableName = Request("Table")
strTableName2 = Request("Table2")
strOrderByField = Request("OrderBy")
' SValue = Soegestrengen fra formularen / QueryString
' SType = Soegetypen (ALL / ANY) fra formular / QueryString
SValue = Request("SValue")
SType = Request("SType")
%>
<%' FOR-loop for at gennemgaa Soegestrengen, taelle mellemrum, og
' foroege 'WordCounter' med 1 for hvert mellemrum
For i = 1 to len(SValue)
If mid(SValue, i, 1) = " " Then
WordCounter = WordCounter + 1
End If
Next
' Nu tilfoejes 1 for at tage det foerste ord med
' Variablen WordCounter indeholder herefter antallet af soegeord
WordCounter = WordCounter + 1
' Definer 'Word' som et array med et max antal soegeord - her 100
Dim Word(100)
' Arrayet fyldes nu med vores ord
CurrentWord = 1
For i = 1 to len(SValue)
If mid(SValue, i, 1) = " " Then
CurrentWord = CurrentWord + 1
Else
Word(CurrentWord) = Word(CurrentWord) + mid(SValue, i, 1)
End If
Next
%>
<%
' Her bygges en SQL-soegestreng baseret paa hvilken soegetype, vi valgte
' Foerste del af SQL-udtrykket
SQL = "SELECT Projekttitel, Fornavn, Efternavn, Telefonarbejde, Emailadressearbejde, Adresser.ProjektID FROM ADRESSER, BESKRIVELSER WHERE ADRESSER.ProjektID = BESKRIVELSER.ProjektID AND" &" "
' FOR-løkke for at sætte SQL-strengen sammen med ALL eller ANY
For i = 1 to WordCounter
If SType = "AllWords" Then
If i <> WordCounter Then
SQL1 = SQL1 & strFieldName & " LIKE '%" & Word(i) & "%' AND "
ElseIf i = WordCounter Then
SQL1 = SQL1 & strFieldName & " LIKE '%" & Word(i) & "%'"
End If
ElseIf SType = "AnyWords" Then
If i <> WordCounter Then
SQL1 = SQL1 & strFieldName & " LIKE '%" & Word(i) & "%' OR "
ElseIf i = WordCounter Then
SQL1 = SQL1 & strFieldName & " LIKE '%" & Word(i) & "%'"
End If
End If
Next
' Sidste del af SQL-udtrykket, hvor vi sorterer
if Len(strOrderByField) > 0 then
SQL = SQL & SQL1 & " ORDER BY " & strOrderByField
Else SQL = SQL & SQL1
End If
%>
Kontrol af SQL: <% =SQL %>
<%
' Forbinder til vores database
Set dbConn = Server.CreateObject("ADODB.Connection")
dbConn.Open "DBQ="&Request.ServerVariables("APPL_PHYSICAL_PATH")&"xxx\yyy.mdb;DefaultDir="&Request.ServerVariables("APPL_PHYSICAL_PATH")&"xxx;Driver={Microsoft Access Driver (*.mdb)};PWD=xxx"
' Definerer selv et recordsaet, saa vi kan bevaege os frit
Set rsRecords = Server.CreateObject("ADODB.RecordSet")
rsRecords.Open SQL, dbConn, adOpenStatic, adLockOptimistic
%>
<%' Checkes, at recordsettet ikke er i top eller i bund
If Not rsRecords.EOF And Not rsRecords.BOF Then
' Hvorefter vi er klar til udskriften
%>
<DIV id="Overskrift2" style="position: absolute; left: 179px; top: 81px; width: 418px; height: 35px; z-index: 11; text-align: left; visibility: visible">
<DIV align="center" class="Overskrift-A">Søgning efter grønne guider</DIV></DIV>
<DIV id="Resultatformular" style="position:absolute; left:40px; top:141px; width:650px; height:600px; z-index:13; visibility: visible" class="Brød-alm">
<P align="center"><SPAN class="Brød-stor">Søgeresultater </SPAN><P></P>
<!---------- Her er resultatet af vores soegning ------->
<TABLE width="650" cellpadding="5" cellspacing="1" border=0>
<TR>
<TH bgcolor="#339966" height="20"><FONT face="Arial" size="2" color="White"><% =("Projekttitel")%> </FONT></TH>
<TH bgcolor="#339966" height="20"><FONT face="Arial" size="2" color="White"><% =("Fornavn")%> </FONT></TH>
<TH bgcolor="#339966" height="20"><FONT face="Arial" size="2" color="White"><% =("Efternavn")%> </FONT></TH>
<TH bgcolor="#339966" height="20"><FONT face="Arial" size="2" color="White"><% =("Telefon")%> </FONT></TH>
<TH bgcolor="#339966" height="20"><FONT face="Arial" size="2" color="White"><% =("Emailadresse")%> </FONT></TH>
</TR>
<TR></TR>
<TR></TR>
<TR></TR>
<% Do While Not rsRecords.EOF %>
<TR>
<TD align="left"><FONT face="Arial" size="1" color="Green"><A href="ggdata.asp?ID=<%=rsRecords("ProjektID")%>"><% =rsRecords("Projekttitel")%> </A>
<TD align="left"><FONT face="Arial" size="1" color="Green"><% =rsRecords("Fornavn")%>
<TD align="left"><FONT face="Arial" size="1" color="Green"><% =rsRecords("Efternavn")%>
<TD align="left"><FONT face="Arial" size="1" color="Green"><% =rsRecords("Telefonarbejde")%>
<TD align="left"><FONT face="Arial" size="1" color="Green"><A href="mailto:<% =rsRecords("Emailadressearbejde")%>"><% =rsRecords("Emailadressearbejde")%> </A>
</TR>
<%rsRecords.MoveNext%>
<% Loop %>
</TABLE>
</DIV>
<%Else
Response.Write("<FONT SIZE=5><B>Kunne ikke finde nogen personer</B></FONT></CENTER>")
' Og her er udskriften faerdig
End If %>
<%
' her stoler vi ikke på VB, men lukker selv objektet og smider forbindelsen
rsRecords.Close
dbConn.Close
' Og her er IF FORMULAR eller RESULTAT faerdig
End If %>
<DIV id="Copyright" style="position: absolute; left: 208px; top: 1100px; width: 369px; height: 40px; z-index: 25; text-align: left; vertical-align: middle; visibility: visible">
<DIV align="center">
<H6> <FONT face="Verdana, Arial, Helvetica, sans-serif"><BR>
</FONT><FONT face="Verdana, Arial, Helvetica, sans-serif">Bemærkninger:
Skriv til </FONT><FONT face="Verdana, Arial, Helvetica, sans-serif"><A href="mailto:webmaster@greenguides.dk"><B><FONT color="#0000FF">Grønne
Guiders Webmaster</FONT></B></A> </FONT></H6>
</DIV>
</DIV>
</BODY></HTML>