26. april 2004 - 08:13Der er
18 kommentarer og 1 løsning
Lav søgefunktion om til at søge i flere databaser
jeg har en søgefunktion på min side som virker som den skal. Nu har jeg sammen sat mit system med en ny databaser for at undgå belastning på databaserne.
Jeg vil så gerne have at brugeren kan vælge hvilken af databaserne der skal søges i.
Jeg ved overhovedet ikke hvordan dette skal laves. Jeg syntes at den er uoverskulig, så måske en med lidt mere programmering på bagen vil kunne få noget ud af det.
Der er meget kode og skriver derfor ikke koden her, men filen kan hentes på:
det er ikke så svært. Du skal bare gemme connection strengen i en session.
if request.form("ChoseDatabase") = 1 then session("connect") = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("Database1.mdb;") else session("connect") = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("Database2.mdb;") end if
du kan så på de sider hvor databasen skal bruges gøre sådan:
Set Conn = Server.CreateObject("ADODB.Connection") oConn.Open session("connect")
hvis du kigger på min side www.danskehøjtider.dk er der en html form i venstre sidesom jo hen viser til searchdisplay. jeg vil gerne have lavet et input html formen med et felt der skal vælges og hvor og hvad for en kode der skal indsættes i searchdisplay for at det virker
hvordan indsætter jeg så søgningen efter database 2 Der er jo søgning på database 1, men database 2 har jo et andet navn og tabeller. derfor skal den jo også vælge hvad for nogle dataer den skal hente
Så skal du til at lave hele selecten og udskrivningen i if sætningen. Eller hvis du vælger samme antal kollonner i databaserne bruge alias metoden.
if request.form("ChoseDatabase") = 1 then Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("Database1.mdb;") set rs = conn.Execute("select * from ......") do while not rs.eof '.... 'udskriv data her '.... rs.MoveNext loop else Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("Database2.mdb;") set rs = conn.Execute("select * from ......") do while not rs.eof '.... 'udskriv data her '.... rs.MoveNext loop end if
eller alias metoden if request.form("ChoseDatabase") = 1 then Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("Database1.mdb;") set rs = conn.Execute("select id as ThisID, name as ShowData from ......") else Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("Database2.mdb;") set rs = conn.Execute("select myID as ThisId, opskrift as ShowData from ......") end if
do while not rs.eof '.... 'udskriv data her response.write rs("ThisID") response.write rs("ShowData") '.... rs.MoveNext loop
jeg fatter det ikke helt. Jeg har slet ikke nogen "set rs = conn.Execute" funktion i min nuværene kode. Kunne man ikke lave det mere simpelt, så man kunne vælge hvilken fil søge ordet skal sendes til? For jeg har 2 søgefunktioner på mig side. Den ene søger på sider og body tekst i en database og den anden søger efter opskrifter i en anden database.
Jeg kan godt finde ud af den der søger i opskrifterne, men den anden bliver du nok nød til at hjælpe mig med af forstå
Det er koden til at søge i side og body. Det hentes ind på en side vis "include file"
<%
Randomize
mypage=request("whichpage") If mypage="" then mypage=1 End If
mypagesize=request("pagesize") If mypagesize="" then mypagesize=10 End If
maxpages = 0
Function NoCache()
NoCache = Int(9999 * Rnd) + 1
End Function
Function SQL()
If Request("strSQL") = "" Then
doofer = 0 wrds = Trim(Replace(Replace(request("search"),"'","''"),chr(34),"")) & " " if Len(wrds) > 0 Then
for ws = 1 to Len(wrds)
char = Mid(wrds,ws,1) if char = Chr(34) then doofer = NOT doofer end if if char <> Chr(34) Then if char = " " AND doofer = 0 then strTempSQL = strTempSQL + " AND (pagename LIKE '%%%" & strTemp & "%%%' OR bodytext LIKE '%%%" & strTemp & "%%%') " strTemp = "" else strTemp = strTemp + char end if end if next if Len(strTempSQL) > 5 then strTempSQL = Right(strTempSQL,Len(strTempSQL)-5) end if end if
If Session("secure") = "ok" Then ext = " " Else ext = " AND onhold <> 'yes' " End if
If Session("secure") = "subok" Then ext = " AND password = '" & Session("pword") & "' " End if
strSQL = "SELECT * FROM pages WHERE ( " & strTempSQL & " )" & ext & "ORDER BY id"
Else
strSQL = request("strSQL")
End if
SQL = strSQL
End Function
Sub ClickMore()
pad = " " scriptname = request.servervariables("script_name")
if CInt(mypage) > 1 then ref="<a href='" & scriptname ref=ref & "?whichpage=" & (mypage - 1) ref=ref & "&pagesize=" & mypagesize ref=ref & "&search=" & Server.URLEncode(Request("search")) ref=ref & "&strSQL=" & server.URLencode(strSQL) ref=ref & "'>Tilbage</a>" response.write(ref & " ") End if
for counter=1 to maxpages If counter >= 10 then pad=" " end if If CInt(counter) <> CInt(mypage) Then ref="<a href='" & scriptname ref=ref & "?whichpage=" & counter ref=ref & "&pagesize=" & mypagesize ref=ref & "&search=" & Server.URLEncode(Request("search")) ref=ref & "&strSQL=" & server.URLencode(strSQL) ref=ref & "'>" & "<font size=" & Chr(34) & "2" & Chr(34) & ">" & counter & "</font></a>" & pad response.write ref & " " Else response.write("<font size=" & Chr(34) & "2" & Chr(34) & " color=" & Chr(34) & "#FF0000" & Chr(34) & ">" & counter & "</font></a>") & pad & " " End if if counter mod 10 = 0 then response.write("<br>") end if next
If CInt(mypage) < CInt(maxpages) Then ref="<a href='" & scriptname ref=ref & "?whichpage=" & (mypage + 1) ref=ref & "&pagesize=" & mypagesize ref=ref & "&search=" & Server.URLEncode(Request("search")) ref=ref & "&strSQL=" & server.URLencode(strSQL) ref=ref & "'>Frem</a>" response.write(ref) End if
End Sub
Function FormatText(tempText,tempHTML)
tempText = tempText & " " & vbCrLf
tempImageFix = Split(tempText & " ",vbCrLf)
For j = 0 to Ubound(tempImageFix)
tempFilename = "" wholeNewline = ""
If Instr(Trim(tempImageFix(j)),"pic=") >= 1 OR Instr(Trim(tempImageFix(j)),"picR=") >= 1 OR Instr(Trim(tempImageFix(j)),"picL=") >= 1 OR Instr(Trim(tempImageFix(j)),"file=") >= 1 Then ' tempFilename = Replace(tempImageFix(j),"pic=","") ' wholeNewline = "¦¦p align=""center""¦¦¦ ¦¦img align=""center"" border=""0"" src=""images/" & tempFilename & """¦¦¦ ¦¦/p¦¦¦" tempText = Replace(tempText,tempImageFix(j) & vbCrLf,"")
If Instr(tempText,"HTMLHERE") >= 1 Then If Trim(tempHTML) = "" Then tempDisplay2HTML = "" Else tempDisplay2HTML = RemoveHTML(tempHTML) End If tempText = Replace(tempText & " ","HTMLHERE",tempDisplay2HTML) End If
rst.movefirst rst.pagesize=10 maxpages = CInt(rst.pagecount) maxrecs = CInt(rst.pagesize) rst.absolutepage = mypage howmanyrecs=0 %> <p align="center"><% = rst.recordcount %> side<% If rst.recordcount > 1 Then Response.Write("r passer ") Else Response.Write (" passer ") End If %> din søgning. <% If maxpages > 1 Then response.write("Side " & mypage & " af " & maxpages) End If %><br><br></p>
<div align="center"> <table border="0" cellpadding="4" width="100%" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111"> <% if Session("secure") = "ok" then %> <tr class="left"> <td colspan="3"> <p align="center">Du er logget ind som admin og ved at klikke på "Rediger" har du mulighed for at rette og slette</p> </td></tr>
<tr><td colspan="3" height="10"> </td></tr> <% end if %> <% tempcount = (10 * (mypage - 1)) + 1
Do Until rst.EOF OR howmanyrecs>=maxrecs %> <tr> <td width="95" valign="top"><strong class="left"> <% If Session("secure") = "ok" Then %> <a href="../../AdminEditPage.asp?id=<% = rst("id") & "&nc=" & NoCache() %>">Rediger</a> <% End If %> <% If Session("secure") = "subok" Then %> <a href="../../UserEditPage.asp?id=<% = rst("id") %>">Rediger</a> <% End If %> </strong></td> <td width="520" align="left" valign="top"><a href="../../default.asp?id=<% = rst("id") %>" class="left"> <% = rst("pagename") %> </a> <% If rst("onhold") = "yes" Then %> <br> <span class="style1">På vente</span><strong> <% End If %> </strong></td> <td width="450" valign="top"><% = Left(RemoveHTML(rst("bodytext")) & Space(90),90) & "..." %><hr noshade color="#C0C0C0" size="1"></td> </tr> <% tempcount = tempcount + 1 rst.MoveNext howmanyrecs=howmanyrecs+1 Loop %> <tr> <td valign="top" colspan="3"></td> </tr> </table> </div> <% If rst.recordcount > 10 Then %> <p align="center">Klik på side nummerne for flere resultater</p> <div align="center"> <center> <table border="0" cellpadding="0" cellspacing="0" class="left"> <tr> <td valign="middle" align="left"><% Call ClickMore() %></td> </tr> </table> </center> </div>
<% End If Else %> <center> <p align="center"> </p> <p align="center">Der var ikke noget der passet din søgning.</p> <p align="center">Søg igen</p> <p> </p>
<%
End If
rst.Close set rst = nothing con.Close set con = nothing
With Response .Write"<td>" .Write"<li>" & strLink & "</li>" .Write"</td>" & vbcrlf End With if (i mod 4) = 0 then Response.Write "</tr><tr>" & vbcrlf end if i = i + 1 rs.MoveNext wend Conn.Close Set Conn = Nothing %>
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.