Avatar billede justdoit Nybegynder
23. august 2002 - 12:29 Der er 11 kommentarer og
3 løsninger

Hjælp til en lille 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. Disse ID'er passer sammen med nogle navne i en anden tabel.

Så i stedet for at skrive 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.


<%
' 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 productName, productDesc, catalogID FROM products WHERE"
strSQL = strSQL & " (productName LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (productDesc LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (catalogID 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 justdoit Nybegynder
23. august 2002 - 12:47 #1
Help please! I'm realy stuck on this one..
Avatar billede coltau Juniormester
23. august 2002 - 13:40 #2
Hvis ID-felete i tabellen: catalogs herdder ID skulle denne kunne bruges.

strSQL = "SELECT products.productName, products.productDesc, products.catalogID, catalogs.catalogname FROM products WHERE (products.catalogID = catalogs.ID) and "
strSQL = strSQL & " (productName LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (productDesc LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (catalogID LIKE '%" & strKeyword & "%')"
Avatar billede justdoit Nybegynder
23. august 2002 - 22:11 #3
Tak, jeg er ikke hjemme hos mig selv lige nu, så jeg prøver lige at vende tilbage, men tak ind til videre.

Vh

Justduit
Avatar billede justdoit Nybegynder
24. august 2002 - 13:10 #4
Hej, nu har jeg fået set lidt på det, med det virker ikke helt. Jeg har fjernet nogle ting der var overflødelige, sådan at min srtSQL ser sådan ud nu..

strSQL = "SELECT products.catalogID, catalogs.catalogname FROM products WHERE (products.catalogID = catalogs.catalogID) and "
strSQL = strSQL & " (catalogID LIKE '%" & strKeyword & "%')"


I tabellen catalogs hedder ID (catalogID), vil du prøve at se på det?

Fejlen jeg får lige nu er:
Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][ODBC Microsoft Access-driver] Der er for få parametre. Der var ventet 1.

Fejlen er i linie 80 som er: Set rs = myConn.Execute(strSQL)
Avatar billede hossein Nybegynder
24. august 2002 - 16:08 #5
Fra begge tabeller: from products 0g Catalogs derfor "few parameter"

strSQL = "SELECT products.productName, products.productDesc, products.catalogID, catalogs.catalogname FROM products, catalogs WHERE (products.catalogID = catalogs.ID) and "
strSQL = strSQL & " (productName LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (productDesc LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (catalogID LIKE '%" & strKeyword & "%')"
Avatar billede justdoit Nybegynder
24. august 2002 - 16:42 #6
øhh hossein: det forstår jeg ikke, det er jo det samme som coltau
skrev, og det virkede ikke helt!!

Og husk at catalogs.ID hedder catalogs.catalogID..
Avatar billede hossein Nybegynder
24. august 2002 - 16:59 #7
det er klart, sorry jeg var lidt for hurtigt.

strSQL = "SELECT products.productName, products.productDesc, catalogs.catalogsID, products.catalogID, catalogs.catalogname FROM products, catalogs WHERE (products.catalogID = catalogs.ID) and "
strSQL = strSQL & " (productName LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (productDesc LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (catalogID LIKE '%" & strKeyword & "%')"

alle de felter (eller koloner) som du vælger i din kritere skal også vælges i din select sætning, desuden har du CatalogID i begge tabeller så skrev fx. catalogs.catalogsID, products.catalogID også i dine kritere dvs. alt efter din "where".
Du skal også tjeke om du har stavet korrekt. Også feltene hedder det samme i tabellen og i din SQL sætning (query).
Avatar billede hossein Nybegynder
24. august 2002 - 17:00 #8
igen hurtig, ret den til:

strSQL = strSQL & " (products.productName LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (products.productDesc LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (products.catalogID LIKE '%" & strKeyword & "%')"
Avatar billede coltau Juniormester
24. august 2002 - 23:22 #9
Hvis du har reduceret den er nedenstående så ikke nok. ?

strSQL = "SELECT products.catalogID, catalogs.catalogname FROM products, catalogs WHERE (products.catalogID = catalogs.catalogID) and "
strSQL = strSQL & " (catalogID LIKE '%" & strKeyword & "%')"
Avatar billede justdoit Nybegynder
25. august 2002 - 15:26 #10
Jeg får denne fejl, som jeg ikke kan finde ud af??

Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC Microsoft Access-driver] Det angivne felt "catalogID" kan referere til mere end én tabel, der er vist i FROM-delsætningen i sætningen SQL.
Avatar billede justdoit Nybegynder
25. august 2002 - 15:28 #11
Lad os bare bruge denne, så kan jeg selv forkorte når det komme til at virke!

så koderne ser sådan hos mig lige nu:

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 & "%')"
strSQL = strSQL & " OR (catalogID LIKE '%" & strKeyword & "%')"
Avatar billede justdoit Nybegynder
25. august 2002 - 20:47 #12
Jeg lukker og prøver at omformulere mit spørgsmål lidt under en anden kategori, men hvis I stadig kan hjælpe mig, vil det være super og I skal nok få nogle flere point så!!
Avatar billede hossein Nybegynder
25. august 2002 - 21:16 #13
Hvorfor der er problemmer
strSQL = "SELECT products.productName, products.productDesc, catalogs.catalogsID, products.catalogID, catalogs.catalogname FROM products, catalogs WHERE (products.catalogID = catalogs.ID) and "
strSQL = strSQL & " (products.productName LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (products.productDesc LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (products.catalogID LIKE '%" & strKeyword & "%')"

i din mail 25/08-2002 15:26:37 står: Det angivne felt "catalogID" kan referere til mere end én tabel, der er vist i FROM-delsætningen i sætningen SQL. fordi du har catalogID i begge tabeller derfor du skal skrive hvad for en. I den ovenstående SQL har jeg bestemmt products.catalogID så må det ikke opstå nogen fejl. du kan eventull sende din db til mig så kan jeg rette den, Det er ikke så besværligt. mach3@get2net.dk men kun med få data.

Hilsen Hossein
Avatar billede justdoit Nybegynder
26. august 2002 - 09:42 #14
Jeg har sendt en mail til dig!
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