Avatar billede vagn_eriksen Nybegynder
11. august 1999 - 15:01 Der er 6 kommentarer

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&oslash;g efter din gr&oslash;nne guide</TITLE>
<META http-equiv=CONTENT-TYPE content="text/html; charset=iso-8859-1">
<META name=KEYWORDS content="green, guide, advisor, environment, gr&oslash;n, Danmark, milj&oslash;, protection, bio, biology, health, nutrition, agenda, ngo, fond, local, groundwater, gr&uuml;n, gr&uuml;nen, helfer, umweltsch&uuml;tz, umweltbewusstsein">
<META name=DESCRIPTION content="S&oslash;geside for de gr&oslash;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&oslash;d-alm">
  <P align="center"><SPAN class="Br&oslash;d-stor">S&oslash;geformular </SPAN><!---------- Her har vi f&oslash;rst vores s&oslash;geformular  ------->
  <FORM method=POST action="ggsearch.asp" name="SeachForm">
  <TABLE width="325" border="0" height="200">
    <TR>
      <TD width="15%">&nbsp;</TD>
      <TD width="2%">&nbsp;</TD>
      <TD width="38%">&nbsp;</TD>
    </TR>
    <TR>
        <TD width="15%" class="Br&oslash;d-alm">S&oslash;gekriterium</TD>
      <TD width="2%">&nbsp;</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&oslash;d-alm">S&oslash;gefelt</TD>
      <TD width="2%">&nbsp;</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&oslash;d-alm">Sortering</TD>
      <TD width="2%">&nbsp;</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&oslash;d-alm">S&oslash;getekst</TD>
      <TD colspan="2">
        <DIV align="right">
          <INPUT type=TEXT name="SValue" size=40>
        </DIV>
      </TD>
    </TR>
    <TR>
      <TD width="15%">&nbsp;</TD>
      <TD width="2%">&nbsp;</TD>
      <TD width="38%">&nbsp;</TD>
    </TR>
    <TR>
      <TD width="15%" height="14">&nbsp; </TD>
      <TD width="2%" height="14">&nbsp;</TD>
      <TD width="38%" height="14">
        <DIV align="center">
          <INPUT type=SUBMIT name="S&Oslash;G" value="S&oslash;g nu">
          <INPUT type="reset" name="Cancel" value="Ryd Feltet">
        </DIV>
      </TD>
    </TR>
    <TR>
      <TD width="15%">&nbsp;</TD>
      <TD width="2%">&nbsp;</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>&nbsp;
</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&aring;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&oslash;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&oslash;d-alm">
    <P align="center"><SPAN class="Br&oslash;d-stor">S&oslash;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&aring; 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&aelig;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>
Avatar billede stoffer Nybegynder
11. august 1999 - 15:24 #1
øhhh den virker da fint...
Avatar billede meyer Nybegynder
11. august 1999 - 15:25 #2
Jeg tror du mangler et <% et eller andet sted!! Kan ikke få den til at gå ned!!

Meyer
Avatar billede stoffer Nybegynder
11. august 1999 - 15:28 #3
prøv eksemplet, det går ikke ned på min IE når jeg søger på de ord
Avatar billede laust Nybegynder
11. august 1999 - 15:34 #4
Husk, at apostroffer generelt ikke virker, hvis de står på samme linie som asp start-/slut-tags (<% %>).
(Bare til din option.Explicit)
Har du prøvet at bede den om at udskrive
sql-strengen? Det kan måske hjælpe dig til at finde fejlen.
p.s. Kan en OR-forespørgsel evt. være for stor en mundfuld for stakkels lille PWS?
Avatar billede vagn_eriksen Nybegynder
11. august 1999 - 21:03 #5
I har vist ikke set rigtigt efter....
På webhotellet går den ikke ned, men giver et hav af forkerte oplysninger. Nyt eksempel: søg på "kolding" og lad valgmulighederne stå som standard. Dette giver 2 hits OK. Søg nu på "forbruger" med standardvalgmuligheder. Giver også 2 hits, hvoraf det ene er identisk med foregående.
Søg nu på "kolding forbruger" og sæt den til "enten-eller". Det giver 100 hits med navnet "Grøn forbrugerguide i Kolding", men med varierende navne og emailadresser.
Har lige testet igen klokken 21.
Avatar billede meyer Nybegynder
12. august 1999 - 08:11 #6
Hej Vagn.

Kan du ikke sende db og de 2 scripts, så skal jeg kigge på det?? Jeg kan godt se den er helt gal!!

mmg@mmg.dk

Meyer
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