Avatar billede ponyboye Nybegynder
26. april 2004 - 08:13 Der 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å:

http://www.danskehojtider.dk/searchdisplay.zip

på forhånd tak for hjælpen
Avatar billede fennec Nybegynder
26. april 2004 - 08:20 #1
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")
Avatar billede ponyboye Nybegynder
26. april 2004 - 08:24 #2
okay. men mit problem er også at få indsat koden rigtig i søge funktionen.
Avatar billede ponyboye Nybegynder
26. april 2004 - 08:28 #3
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
Avatar billede fennec Nybegynder
26. april 2004 - 08:40 #4
Man skal altså altid vælge hvilken database der skal bruges... Du behøver så ikke bruge session.

<select name="ChoseDatabase">
  <option value="1">Database 1
  <option value="2">Database 2
</select>

*** Search.asp ***
Set Conn = Server.CreateObject("ADODB.Connection")
if request.form("ChoseDatabase") = 1 then
  Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("Database1.mdb;")
else
  Conn.Open = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("Database2.mdb;")
end if

set rs = conn.Execute("select * from ......")
Avatar billede fennec Nybegynder
26. april 2004 - 08:42 #5
der var lige kommet et = tegn med som ikke skal være der.

Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("Database2.mdb;")
Avatar billede steen_hansen Forsker
26. april 2004 - 08:49 #6
Kigger med
Avatar billede ponyboye Nybegynder
26. april 2004 - 09:18 #7
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
Avatar billede ponyboye Nybegynder
26. april 2004 - 09:20 #8
"select * from" skal vel også have noget ide noget
Avatar billede fennec Nybegynder
26. april 2004 - 09:28 #9
ok. Det havde jeg ikke fanget....

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
Avatar billede ponyboye Nybegynder
26. april 2004 - 09:37 #10
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å
Avatar billede fennec Nybegynder
26. april 2004 - 10:15 #11
Nu er jeg ikke helt med på hvad du har, og hvad du vil....

Du har de to SQl sætninger som søger i databaserne??? så kan du ikke lige smide dem herind.

vi kan også godt sende den til forskellige sider afhængig af hvilken database der er valgt. Det gør vi med javascript.

function sendForm()
{
  if(document.DinForm.ChoseDatabase == 1)
    document.DinForm.action = "SearchOpskrift.asp";
  else
    document.DinForm.action = "SearchPage.asp";
  document.DinForm.submit()
}

<input type="Button" value="Søg" onClick="sendForm()">
Avatar billede ponyboye Nybegynder
26. april 2004 - 21:59 #12
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 & "&nbsp;&nbsp;")
    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 & " &nbsp;&nbsp;"
        Else
            response.write("<font size=" & Chr(34) & "2" & Chr(34) & " color=" & Chr(34) & "#FF0000" & Chr(34) & ">" & counter & "</font></a>") & pad & " &nbsp;&nbsp;"
        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,"")

        End If   
       
    Next
   
    tempText = Replace(tempText,"{{","")
    tempText = Replace(tempText,"}}","")

    tempText = Replace(tempText,">",chr(34) & ">")
    tempText = Replace(tempText,"{","<a href=" & chr(34))
    tempText = Replace(tempText,"}","</a>")

    tempText = Replace(tempText,"[[","<b>")
    tempText = Replace(tempText,"]]" & vbCrLf,"</b>&nbsp;")
    tempText = Replace(tempText,"]]","</b>")
   
    tempText = Replace(tempText,"[","<b>")
    tempText = Replace(tempText,"]","</b>")
   
    tempText = Replace(tempText,"¬",">")
   
    tempText = Replace(tempText,"¦¦¦",">")
    tempText = Replace(tempText,"¦¦","<")   
   
    tempText = Replace(tempText,vbCrLf,"<br>" & 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
   
    FormatText = tempText

End Function


Function RemoveHTML(strText)

    Dim TAGLIST

    TAGLIST = ";!--;!DOCTYPE;A;ACRONYM;ADDRESS;APPLET;AREA;B;BASE;BASEFONT;" &_
              "BGSOUND;BIG;BLOCKQUOTE;BODY;BR;BUTTON;CAPTION;CENTER;CITE;CODE;" &_
              "COL;COLGROUP;COMMENT;DD;DEL;DFN;DIR;DIV;DL;DT;EM;EMBED;FIELDSET;" &_
              "FONT;FORM;FRAME;FRAMESET;HEAD;H1;H2;H3;H4;H5;H6;HR;HTML;I;IFRAME;IMG;" &_
              "INPUT;INS;ISINDEX;KBD;LABEL;LAYER;LEGEND;LI;LINK;LISTING;MAP;MARQUEE;" &_
              "MENU;META;NOBR;NOFRAMES;NOSCRIPT;OBJECT;OL;OPTION;P;PARAM;PLAINTEXT;" &_
              "PRE;Q;S;SAMP;SCRIPT;SELECT;SMALL;SPAN;STRIKE;STRONG;STYLE;SUB;SUP;" &_
              "TABLE;TBODY;TD;TEXTAREA;TFOOT;TH;THEAD;TITLE;TR;TT;U;UL;VAR;WBR;XMP;"

    Const BLOCKTAGLIST = ";APPLET;EMBED;FRAMESET;HEAD;NOFRAMES;NOSCRIPT;OBJECT;SCRIPT;STYLE;"
   
    Dim nPos1
    Dim nPos2
    Dim nPos3
    Dim strResult
    Dim strTagName
    Dim bRemove
    Dim bSearchForBlock
   
    nPos1 = InStr(strText, "<")
    Do While nPos1 > 0
        nPos2 = InStr(nPos1 + 1, strText, ">")
        If nPos2 > 0 Then
            strTagName = Mid(strText, nPos1 + 1, nPos2 - nPos1 - 1)
        strTagName = Replace(Replace(strTagName, vbCr, " "), vbLf, " ")

            nPos3 = InStr(strTagName, " ")
            If nPos3 > 0 Then
                strTagName = Left(strTagName, nPos3 - 1)
            End If
           
            If Left(strTagName, 1) = "/" Then
                strTagName = Mid(strTagName, 2)
                bSearchForBlock = False
            Else
                bSearchForBlock = True
            End If
           
            If InStr(1, TAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
                bRemove = True
                If bSearchForBlock Then
                    If InStr(1, BLOCKTAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
                        nPos2 = Len(strText)
                        nPos3 = InStr(nPos1 + 1, strText, "</" & strTagName, vbTextCompare)
                        If nPos3 > 0 Then
                            nPos3 = InStr(nPos3 + 1, strText, ">")
                        End If
                       
                        If nPos3 > 0 Then
                            nPos2 = nPos3
                        End If
                    End If
                End If
            Else
                bRemove = False
            End If
           
            If bRemove Then
                strResult = strResult & Left(strText, nPos1 - 1)
                strText = Mid(strText, nPos2 + 1)
            Else
                strResult = strResult & Left(strText, nPos1)
                strText = Mid(strText, nPos1 + 1)
            End If
        Else
            strResult = strResult & strText
            strText = ""
        End If
       
        nPos1 = InStr(strText, "<")
    Loop
    strResult = strResult & strText
   
    RemoveHTML = strResult

End Function


Sub MakeMenuBar()

    If Session("secure") = "ok" Then
        ext = " "
    Else
        ext = " AND onhold <> 'yes' "
    End if
   
    Set con = Server.CreateObject("ADODB.Connection")
    con.Open strconn, "", ""

    strSQL = "SELECT * FROM pages WHERE toplevel = 'yes'" & ext & " ORDER BY menubarposition, pagename"

    Set rst = Server.CreateObject("ADODB.Recordset")
    rst.Open strSQL, con, adOpenStatic, adLockReadOnly, adCmdText

    If Not rst.EOF Then

        Response.write("<table border=""0"" cellspacing=""2"" width=""132"" cellpadding=""0"" bordercolor=""#111111"" bordercolorlight=""#FFFFFF"" bordercolordark=""#FFFFFF"" style=""border-collapse: collapse"">" & vbCrLf)
       
        Do While Not rst.EOF
           
            Response.write("<tr>" & vbCrLf)
            Response.write("<td align=""left""><a href=""default.asp?nc=" & NoCache() & "&id=" & rst("id") & """ class=&{ns4class};><img border=""0"" src=""images/site-images/menu-bullet.gif"">" & rst("pagename") & "</a></td>" & vbCrLf)
            Response.write("</tr>" & vbCrLf)
       
            rst.MoveNext
       
        Loop
       
        Response.write("</table>" & vbCrLf)
       
    Else

        sublinks = ""
        content = "Hjemmesiden er ved at blive opdateret, prøv snart igen"

    End If

    rst.Close
    Set rst = nothing
    con.Close
    Set con = nothing

End Sub



strSQL = SQL()

tempStest = Split(strSQL & "  "," ")

If UCase(tempStest(0)) <> "SELECT" Then
    strSQL = "SELECT * FROM pages WHERE id = 1"
End If

' response.write(strSQL)

Set con = Server.CreateObject("ADODB.Connection")
con.Open strconn, "", ""

Set rst = Server.CreateObject("ADODB.Recordset")

rst.cursorlocation=3
rst.cachesize=5
rst.Open strSQL, con, adOpenStatic, adLockReadOnly, adCmdText

If Not rst.EOF Then

    rst.movefirst
    rst.pagesize=10
    maxpages = CInt(rst.pagecount)
    maxrecs = CInt(rst.pagesize)
    rst.absolutepage = mypage
    howmanyrecs=0
%>
  <p align="center"><% = rst.recordcount %>&nbsp;side<% If rst.recordcount > 1 Then Response.Write("r passer ") Else Response.Write (" passer ") End If %>
  din søgning.&nbsp;<% 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>&nbsp;         
          <% End If %>     
          <% If Session("secure") = "subok"  Then %>
          <a href="../../UserEditPage.asp?id=<% = rst("id") %>">Rediger</a>&nbsp;         
          <% 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">&nbsp; </p>
  <p align="center">Der var ikke noget der passet din søgning.</p>
  <p align="center">Søg igen</p>
  <p>&nbsp;</p>
 
  <%

End If

rst.Close
set rst = nothing
con.Close
set con = nothing

%>
Avatar billede ponyboye Nybegynder
26. april 2004 - 22:01 #13
Denne er til at søge i opskrift databasen. Den bliver også hentet ind via "include file"

<%

strKeyword = Trim(Request.Form("Keyword"))

If Len(strKeyword) = 0 Then
    Response.Clear
    Response.Redirect("fejl.asp")
Else
    strKeyword = Replace(strKeyword,"'","''")
End If

strSQL = "SELECT Id, navn, tid, personer, af, in1 FROM opskrifter WHERE"
strSQL = strSQL & " (navn LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (tid LIKE '" & strKeyword & "')"
strSQL = strSQL & " OR (personer LIKE '" & strKeyword & "')"
strSQL = strSQL & " OR (in1 LIKE '%" & strKeyword & "%')"

strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("opskriftdata.mdb")
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strDSN

Set rs = Conn.Execute(strSQL)
i = 1
    while not rs.EOF
   
  strNavn = rs("navn")
  strLink = "<a href='opskrift.asp?id=" & rs("id") & "'>" & strNavn & "</a>"

  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
%>
Avatar billede ponyboye Nybegynder
27. april 2004 - 09:25 #14
fennec >><< jeg har fundet er løsning på problemet.

<form action="search.asp" method="post">
<p class="px5">
<div align="center"><input type="text" name="search" size="12" class="searchbox" style="width: 126px">
</div>
<div align="center"><input type="Image" src="images/site-images/b_search.gif" width="79" height="20" alt="" border="0"></p>
<br>Søg efter sider.
<input name="stype" type="radio" onClick="if(this.checked)this.form.action=this.value;" value="search.asp" checked>
<br>
Søg efter opskrifter
<input name="stype" type="radio" value="search1.asp" onClick="if(this.checked)this.form.action=this.value;">
</div>
</form>


så søger den bare på hver sig søge funktion.
Takker for den hjælp du kunne give
Avatar billede fennec Nybegynder
27. april 2004 - 09:34 #15
no prob....
Avatar billede ponyboye Nybegynder
27. april 2004 - 09:51 #16
det var lidt af en opgave...ikke
Avatar billede fennec Nybegynder
27. april 2004 - 09:54 #17
jo, men det er dem der er sjove at arbejde med :o)
Avatar billede ponyboye Nybegynder
27. april 2004 - 10:28 #18
kender du et godt Artikle system i asp med mulighed for at indsætte billeder?
Avatar billede fennec Nybegynder
27. april 2004 - 10:41 #19
Der er du over i noget der ligner en WYSIWYG editor. Se evt. her: http://www.html.dk/artikler/00030/
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