Avatar billede justdoit Nybegynder
25. august 2002 - 23:42 Der er 10 kommentarer og
1 løsning

Hjælp til søgefunktion

Nedenfor har jeg koden til min søgefunktion der søger på et ord. Når ordet er fundet, udskriver den et ID-nummer. Disse ID'er passer sammen med nogle navne i en anden tabel.

Så i stedet for at skrive et tal ud, vil jeg gerne have navnene skrevet ud, men hvordan gør jeg det??

Den anden tabel hvor navnene ligger hedder catalogs, og der hvor navnene ligger hedder catalogName.


Please help.....


<%
' Henter værdien fra default.asp
strKeyword = Trim(Request.Form("soeg"))

If Len(strKeyword) <= 1 Then
    ' Hvis der ikke er skrevet i feltet
    Response.Clear
    Response.Redirect ("default.asp")
Else
    ' Hvis der er skrevet i feltet
    strKeyword = Replace(strKeyword,"'","''")
End If

' Opbygger en dynamisk SQL streng
strSQL = "SELECT products.productName, products.productDesc, products.catalogID, catalogs.catalogID, catalogs.CatalogName FROM products, catalogs WHERE (products.catalogID = catalogs.catalogID) and "
strSQL = strSQL & " (productName LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (productDesc LIKE '%" & strKeyword & "%')"

strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../e-handel/db/database.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
    ' Hvis der er fundet poster på søgningen
    Response.Write "<p><div align=""center""> Der blev søgt på ordet <b>" & strKeyword & "</b> som gav følgende resultat:</div></p>"
    Response.Write "<table border=0 width=430>"
    Response.Write "<tr><td><b>Kategori</b></td></tr>"
    Do While Not rs.EOF
        Response.Write "<tr><td>" & rs("catalogID") & "</td></tr>"
     
        rs.MoveNext
    Loop
    Response.Write "</table>"
Else
    Response.Write "Der er ikke fundet noget på denne søgning."
End If

myConn.Close
Set myConn = Nothing
%>
Avatar billede nih Novice
26. august 2002 - 02:21 #1
Du kan opbygge din SQL over 2 tabeller, noget ala det her:

strSQL = "SELECT catalogs.catalogName, products.productName, products.productDesc, products.catalogID, catalogs.catalogID, catalogs.CatalogName
FROM products INNER JOIN catalogs ON products.catalogID = catalogs.catalogID
WHERE ..........

Og så
Do While Not rs.EOF
        Response.Write "<tr><td>" & rs("catalogs.catalogName") & "</td></tr>"
     
        rs.MoveNext
    Loop

Niels
Avatar billede nih Novice
26. august 2002 - 02:24 #2
Prøv at joine tabellerne i Access, og kig på SQL visningen.
Avatar billede nih Novice
26. august 2002 - 02:26 #3
ehh, nu har jeg kigget på din sql. De er da joinet sammen :)

du skal bare udskrive rs("catalogs.catalogName") istedet for rs("catalogID")

Niels
Avatar billede justdoit Nybegynder
26. august 2002 - 09:25 #4
Øhh, jeg får denne fejl (Datatyperne stemmer ikke overens i kriterieudtrykket.) når jeg skriver rs("catalogs.catalogName") istedet for rs("catalogID")???
Avatar billede hossein Nybegynder
26. august 2002 - 22:30 #5
hej, efter regler jeg indsætter koden her:
michael jeg tror Catalogs.CatalogID er Autonummer derfor products.CatalogID datatype må være tal ellers Datatype mismatch, men i den database jeg sendte til dig har jeg rettet den.

<%
' Path to Database
Dim Ketab
Ketab = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/project4/data.mdb")
%>

<%
    dim strKeyword
    strKeyword = Trim(Request.Form("soeg"))
%>
<!-- den kan du bare fjerne -->

<center>
      <form method="Post" id=form1 name=form1>
        <INPUT type="text" id=text1 name=soeg>
      <input type="submit" name="btnSearch" value="Search"></p>
      </form>
</center>
<!-- Her til fjernes -->
<%
' jeg ved ikke om dette if sætning virker da jeg havde ikke set default.asp
If Len(strKeyword) <= 1 Then ' Hvis der ikke er skrevet i feltet   
    Response.Clear   
    Response.Redirect("default.asp")
    Else    ' Hvis der er skrevet i feltet   
    strKeyword = Replace(strKeyword,"'","''")
    End If

    Set con = server.CreateObject("ADODB.Connection")
    con.Open ketab
   
    Set RS = Server.CreateObject("ADODB.Recordset")

    strSQL = "SELECT Catalogs.catalogID, Catalogs.CatalogName, Products.ProductID, Products.ProductName, Products.ProductDesc, Products.ProductImg, Products.ProductPrice, Products.NuminStock, Products.CatalogID, Products.DateAvailable FROM Products, catalogs where Catalogs.catalogID = Products.CatalogID "
    strSQL = strSQL & " AND (products.productName LIKE '%" & strKeyword & "%')"
    strSQL = strSQL & " OR (products.productDesc LIKE '%" & strKeyword & "%')"
   
    RS.open strSQL, con


    If Not (rs.BOF Or rs.EOF) Then
        Response.Write "<p><div align=""center"">Der blev søgt på ordet<b> " & strKeyword & " </b> som gav følgende resultat:</div></p>"
        Response.Write "<table border=0 width=430>"
        Response.Write "<tr><td><b>Kategori</b></td></tr>"
            Do While Not rs.EOF
            Response.Write "<tr><td>" & rs("catalogs.catalogID") & "</td></tr>"
            Response.Write "<tr><td>" & rs("productDesc") & "</td></tr>"

            rs.MoveNext
            Loop
        Response.Write "</table>"
    Else
        Response.Write "Der er ikke fundet noget på denne søgning."
    End If
    Con.Close
    Set Con = Nothing
%>

Hilsen Hossein
Avatar billede nih Novice
26. august 2002 - 22:58 #6
Hi Hossein

Hvorfor får justdoit, så ikke fejlen (Datatyperne stemmer ikke overens i kriterieudtrykket) i den oprindelige SQL, han bruger i oplægget ????

Niels
Avatar billede hossein Nybegynder
26. august 2002 - 23:14 #7
Hi nih

Jeg fik ikke tilsendt db-en jeg ved ikke hvorfor han fik det, måske han har ændret det i mellem tiden. Det var bare min gæt. Det er mystiken.
Men måske han kan selv forklare hvad han har gjort. Men ellers virker den godt nok hos mig.

Hilsen Hossein
Avatar billede justdoit Nybegynder
26. august 2002 - 23:29 #8
Hej Hossein, jeg har lige sendt db så du kan se den, da det stadig driller lidt!
Avatar billede hossein Nybegynder
26. august 2002 - 23:43 #9
Det er fordi du har ikke inkluderet Hoseditme.asp i filen soeg_db.asp. i hoseditme.asp står:

<%
' Path to Database
Dim Ketab
Ketab = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/project4/data.mdb")
%>
Du skal rette ("/project4/data.mdb") skriv din egen path. Og læg Hoseditme.asp samme sted som andre filer ligger.

jeg sender med det samme retur. en ting til top, bund og menu.asp har jeg fjernet sæt dem ind igen.

hilsen Hossein
Avatar billede justdoit Nybegynder
26. august 2002 - 23:58 #10
ok, jeg har nu skrevet den rigtige sti ( <%
Dim Ketab
Ketab = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("../e-handel/db/database.mdb")
%>)

Men jeg får fejlen: Datakildenavnet blev ikke fundet, og der er ikke angivet en standarddriver.

Skal filen med stien ikke includeres?? Eller hvad er der ellers galt?
Avatar billede justdoit Nybegynder
28. august 2002 - 11:08 #11
jeg har rettet lidt selv på det og det kom til at virke - mange tak..
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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