Avatar billede jensen24 Nybegynder
30. maj 2001 - 22:07 Der er 7 kommentarer og
1 løsning

udskriv specifikt indhold fra database efter søgning

Jeg er ved at lave en filmdatabase på nettet. Jeg har bare et problem.

Jeg har et en søgeside katalog.htm der refererer til katalog_resutater.asp.

Søger jeg i alle felter uden at indtaste text finder resultatsiden alle poster i databasen.
Vil jeg derimod søge på en titel der begynder med fx \'F\' er resultatsiden blank selvom der er flere records med \'F\'

Er der nogen der kan hjælpe?


KATALOG.HTM
<form name=\"resultater\" action=\"katalog_resultater.asp\" method=\"get\">

Søg i :

  <select name=\"mnuGenre\" size=\"1\">
    <option value=\"%\" selected>Alle felter</option>
    <option value=\"genre\">Genre</option>
    <option value=\"titel\">Titel</option>
    <option value=\"producer\">Producer</option>
  </select>

efter:

<input type=\"text\" name=\"mnuTitel\" size=\"30\">
<input type=\"submit\" value=\"Search\" name=\"Submit\">
</form>




KATALOG_RESULTATER.ASP


<%
set katalog = Server.CreateObject(\"ADODB.Recordset\")
katalog.ActiveConnection = MM_connKoncern_STRING
katalog.Source = \"SELECT produktions_id, titel, genre, producer, synops  FROM katalog  WHERE titel LIKE \'\" + Replace(katalog__varGenre, \"\'\", \"\'\'\") + \"\' AND genre LIKE \'\" + Replace(katalog__varTitel, \"\'\", \"\'\'\") + \"\'  ORDER BY genre\"
katalog.CursorType = 0
katalog.CursorLocation = 2
katalog.LockType = 3
katalog.Open()
katalog_numRows = 0
%>

...

<%
While ((Repeat1__numRows <> 0) AND (NOT katalog.EOF))
%>

Titel: <%=(katalog.Fields.Item(\"titel\").Value)%><br>
Genre: <%=(katalog.Fields.Item(\"genre\").Value)%><br>
Synops: <%=(katalog.Fields.Item(\"synops\").Value)%><br>
Producer: <%=(katalog.Fields.Item(\"producer\").Value)%><br>

<%
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  katalog.MoveNext()
Wend
%>
Avatar billede ares Nybegynder
30. maj 2001 - 22:15 #1
et skud fra hofte kunne være at du bruger AND i din SQL sætning istedet for OR

SELECT produktions_id, titel, genre, producer, synops  FROM katalog  WHERE titel LIKE \'\" + Replace(katalog__varGenre, \"\'\", \"\'\'\") + \"\' AND genre LIKE \'\" + Replace(katalog__varTitel, \"\'\", \"\'\'\")

hvilket betyder at både \"titel\" og \"genre\" skal være lig med eller begynde med f.eks. F

Hvis du vil undgå at alle poster vise når der ikke står noget i feltet kan du bare lave redirect.

IF søgefelt = \"\" then

Response.redirect

osv.

Ares

Avatar billede idiotbarn Nybegynder
30. maj 2001 - 22:16 #2
Jeg har en søge funktion som ser sådan her ud:
Den virker, men så igen, det er heller ikke mig der har lavet den :) 
<%
\' Henter værdien fra soeg.htm
strKeyword = Trim(Request.Form(\"Keyword\"))

If Len(strKeyword) = 0 Then
    \' Hvis der ikke er skrevet i feltet
    Response.Clear
    Response.Redirect(\"search.htm\")
Else
    \' Hvis der er skrevet i feltet
    strKeyword = Replace(strKeyword,\"\'\",\"\'\'\")
End If

\' Opbygger en dynamisk SQL streng
strSQL = \"SELECT ID, Bandnavn, Sangnavn FROM Tab WHERE\"
strSQL = strSQL & \" (Bandnavn LIKE \'%\" & strKeyword & \"%\')\"
strSQL = strSQL & \" OR (Sangnavn LIKE \'%\" & strKeyword & \"%\')\"

\' Skaber DSNLess forbindelse til DBen
strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"../system/Tabs.mdb\")
Set myConn = Server.CreateObject(\"ADODB.Connection\")
myConn.Open strDSN

\' Skaber et recordset udfra SQL strengen
Set rs = myConn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then

    Do While Not rs.EOF
    %>
      <a href=\"Tab.asp?Id=<%=RS(\"Id\")%>\" target=\"_blank\"><%=rs(\"Bandnavn\")%></a>
      <p>
        <%                   
    rs.MoveNext
    Loop
    Response.Write \"\"
Else
    \' Hvis der ikke er fundet poster på søgningen
    Response.Write \"<p>Der er ikke fundet noget på denne søgning</p>\"
End If

\' Rydder op efter os
myConn.Close
Set myConn = Nothing
%>
      </font>
    <td><font face=\"Impact\" color=\"#F86C00\">
      <%
\' Henter værdien fra soeg.htm
strKeyword = Trim(Request.Form(\"Keyword\"))

If Len(strKeyword) = 0 Then
    \' Hvis der ikke er skrevet i feltet
    Response.Clear
    Response.Redirect(\"search.htm\")
Else
    \' Hvis der er skrevet i feltet
    strKeyword = Replace(strKeyword,\"\'\",\"\'\'\")
End If

\' Opbygger en dynamisk SQL streng
strSQL = \"SELECT ID, Bandnavn, Sangnavn FROM Tab WHERE\"
strSQL = strSQL & \" (Bandnavn LIKE \'%\" & strKeyword & \"%\')\"
strSQL = strSQL & \" OR (Sangnavn LIKE \'%\" & strKeyword & \"%\')\"

\' Skaber DSNLess forbindelse til DBen
strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"../system/Tabs.mdb\")
Set myConn = Server.CreateObject(\"ADODB.Connection\")
myConn.Open strDSN

\' Skaber et recordset udfra SQL strengen
Set rs = myConn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then

    Do While Not rs.EOF
    %>
      <%=rs(\"Sangnavn\")%>
      <p>
        <%
    rs.MoveNext
    Loop
    Response.Write \"\"
Else
    \' Hvis der ikke er fundet poster på søgningen
    Response.Write \"<p>Der er ikke fundet noget på denne søgning</p>\"
End If

\' Rydder op efter os
myConn.Close
Set myConn = Nothing
%>
Avatar billede idiotbarn Nybegynder
30. maj 2001 - 22:22 #3
hov, kun en gang...
Avatar billede jensen24 Nybegynder
30. maj 2001 - 22:28 #4
Jeg har
Avatar billede jensen24 Nybegynder
30. maj 2001 - 22:34 #5
til ares 
det løste ikke problemet.

I min rulleliste bruger jeg navnet mnuGenre og i textfeltet mnuTitel. det er hvor gang der ikke
Avatar billede jensen24 Nybegynder
30. maj 2001 - 22:36 #6
  til ares 
det løste ikke problemet.

I min rulleliste bruger jeg navnet mnuGenre og i textfeltet mnuTitel. Det er hver gang der indtastes noget i de to værdier der er problem
Avatar billede mwittrock Nybegynder
31. maj 2001 - 01:09 #7
Prøv at generere din SQL streng afhængigt af værdien i mnuGenre:

Select Case katalog__varGenre

  Case \"%\"
    strSQL = \"SELECT produktions_id, titel, genre, producer, synops FROM katalog WHERE titel LIKE \'%\" + Replace(katalog__varTitel, \"\'\", \"\'\'\") + \"%\' OR genre LIKE \'%\" + Replace(katalog__varTitel, \"\'\", \"\'\'\") + \"%\' ORDER BY genre\"   

  Case \"genre\"
    strSQL = \"SELECT produktions_id, titel, genre, producer, synops FROM katalog WHERE genre LIKE \'%\" + Replace(katalog__varTitel, \"\'\", \"\'\'\") + \"%\' ORDER BY genre\"   

  Case \"titel\"
    strSQL = \"SELECT produktions_id, titel, genre, producer, synops FROM katalog WHERE titel LIKE \'%\" + Replace(katalog__varTitel, \"\'\", \"\'\'\") + \"%\' ORDER BY genre\"   

  Case \"producer\"
    \' Findes der et \"producer\" felt i din tabel?

End Select
Avatar billede mwittrock Nybegynder
31. maj 2001 - 01:26 #8
Ah, sorry - jeg kan se at der er et producerfelt, så den sidste SQL sætning skal selvfølgelig være:

  Case \"producer\"
    strSQL = \"SELECT produktions_id, titel, genre, producer, synops FROM katalog WHERE producer LIKE \'%\" + Replace(katalog__varTitel, \"\'\", \"\'\'\") + \"%\' ORDER BY genre\"
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