Avatar billede steckel Nybegynder
15. januar 2004 - 20:26 Der er 19 kommentarer og
1 løsning

Søgmenu der søger i en database.

Nu er det sådan at jeg har et database hvor der findes mange tabler i.

Der jeg gerne vil kunne søge i min database i tablen bruger og rækkerne hedder "navn" "brugernavn" "efternavn".
Den skal kunne gøre så man bare har brug for at indtaste det hele i et felt.

Er det overhovede muligt at lave sådan noget i asp?
For jeg er helt på bar bund, og kan ikke rigtig finde noget nogen steder.
Avatar billede eagleeye Praktikant
15. januar 2004 - 20:40 #1
Ja det kan godt laves et eks på søgning:
http://activedeveloper.dk/aspdigital/kapitel2/search.asp
Avatar billede steckel Nybegynder
15. januar 2004 - 20:54 #2
Ja den virker fint hvis jeg kun skrever f.eks et navn. Men hvis jeg skriver et navn og brugernavn kan den ikke finde noget...

Og jeg vil gerne have den til at virke så jeg kan f.eks skrive navn og brugernavn eller brugernavn og efternavn eller alle tre ting...
Avatar billede eagleeye Praktikant
15. januar 2004 - 21:01 #3
hmm ikke helt med...
Du har et input felt? 
Er det i det du vil indtaste eksvis:  Ole Hansen
Så skal den søge efter Ole og Hansen?
Avatar billede eagleeye Praktikant
15. januar 2004 - 21:04 #4
i kolonnerne navn, brugernavn, efternavn?
Avatar billede steckel Nybegynder
15. januar 2004 - 21:10 #5
Ja Hvis jeg nu indtaster Emil og nielsen så skal den finde alt med Emil og nielsen. Men det vil den side ikke jeg har nu her. Jeg kan ikke bare skrive Emil nielsen, for så siger den at ikke den ikke kan finde noget. :(
Avatar billede eagleeye Praktikant
15. januar 2004 - 21:13 #6
Nej ;)
Så skal det laves som dette hvor man laver en slpit på mellemrum og bygger en wheredel op med alt man har indtastet:


<%
str = Request.Form("inputFeltNavn")

arr = Split(str," ")
sqlWhere = ""
for i = lbound(arr) to ubound(arr)
  if sqlWhere <> "" then sqlWhere = sqlWhere & " AND "
  sqlWhere = sqlWhere & "(navn LIKE '%" & arr(i) & "'%"
  sqlWhere = sqlWhere & " OR brugernavn LIKE '%" & arr(i) & "'%"
  sqlWhere = sqlWhere & " OR efternavn LIKE '%" & arr(i) & "'%"
  sqlWhere = sqlWhere & ")"
next

SQL = "select * from tabelnavn"
if sqlWhere <> "" then SQL = SQL & " where " & sqlWhere

Set rs = Conn.Execute(SQL)
..
..
..
%>
Avatar billede steckel Nybegynder
15. januar 2004 - 21:20 #7
Skal koden så se sådan her ud??
For det virker ikke på siden.. :(

<% Response.Buffer = True %>
<%
str = Request.Form("keyword")

arr = Split(str," ")
sqlWhere = ""
for i = lbound(arr) to ubound(arr)
  if sqlWhere <> "" then sqlWhere = sqlWhere & " AND "
  sqlWhere = sqlWhere & "(navn LIKE '%" & arr(i) & "'%"
  sqlWhere = sqlWhere & " OR brugernavn LIKE '%" & arr(i) & "'%"
  sqlWhere = sqlWhere & " OR efternavn LIKE '%" & arr(i) & "'%"
  sqlWhere = sqlWhere & ")"
next

SQL = "select * from users"
if sqlWhere <> "" then SQL = SQL & " where " & sqlWhere

Set rs = Conn.Execute(SQL)

If Not (rs.BOF Or rs.EOF) Then
    ' Hvis der er fundet poster på søgningen
    Response.Write "<p>Søgeresultat</p>"
    Response.Write "<table border=1>"
    Response.Write "<tr><th>Navn</th><th>Adresse</th><th>Beskrivelse</th></tr>"
    Do While Not rs.EOF
        Response.Write "<tr><td>" & rs("ForNavn") & "</td>"
        Response.Write "<td>" & rs("brugernavn") & "</td>"
        Response.Write "<td>" & rs("EfterNavn") & "</td></tr>"
        rs.MoveNext
    Loop
    Response.Write "</table>"
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 eagleeye Praktikant
15. januar 2004 - 21:23 #8
Ja det ser rigtig ud :)

Du skal bare hvade tilføjet et conenction object som hedder Conn som kan forbinde til din database.
Til sidst i koden klades den for  myConn
Så det lige passe sådan du enten bruger myConn eller Conn
Avatar billede steckel Nybegynder
15. januar 2004 - 21:26 #9
Og hvordan i alverden gør man det??? for det ved jeg virkelig ikke hvordan... :(
Avatar billede eagleeye Praktikant
15. januar 2004 - 21:32 #10
Ok :)

Det kan gøres sådan her, du tilføjer disse to linjer i koden:

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("dindatabsefil.mdb")


Og de kan bare komme i toppen af filen sådan her:

<% Response.Buffer = True %>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("dindatabsefil.mdb")


Du skal kan ikke helt undgå at rette i den ene linje som er denne:
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("dindatabsefil.mdb")
Da du skal skrive stien relativ eller fysik til din database samt database navnet. Som det er vist lige nu skal database filen hedde dindatabsefil.mdb og ligge samme med ASP filen du retter i lige nu.
Avatar billede steckel Nybegynder
15. januar 2004 - 21:37 #11
Nu kommer der en fejl sådan ser det ud:

Microsoft JET Database Engine error '80040e14'

Syntax error in query expression '(navn LIKE '%simon'% OR brugernavn LIKE '%simon'% OR efternavn LIKE '%simon'%) AND (navn LIKE '%rønde'% OR brugernavn LIKE '%rønde'% OR efternavn LIKE '%rønde'%)'.

/sider/search.asp, line 25
Avatar billede eagleeye Praktikant
15. januar 2004 - 21:45 #12
hov jeg har lavet en smutter prøv lige at lave for loop'et om til,det sidste % var kommet på den forkerte side af ':

for i = lbound(arr) to ubound(arr)
  if sqlWhere <> "" then sqlWhere = sqlWhere & " AND "
  sqlWhere = sqlWhere & "(navn LIKE '%" & arr(i) & "%'"
  sqlWhere = sqlWhere & " OR brugernavn LIKE '%" & arr(i) & "%'"
  sqlWhere = sqlWhere & " OR efternavn LIKE '%" & arr(i) & "%'"
  sqlWhere = sqlWhere & ")"
next
Avatar billede steckel Nybegynder
15. januar 2004 - 21:57 #13
Nu kommer der kun : Siden kan ikke vises
Avatar billede eagleeye Praktikant
15. januar 2004 - 21:59 #14
Du skulle gerne få en bedre fejl kode/beskrivelse ved at slå denne fra i IE:

funktioner -> internetindstillinger -> avanceret -> fjern kryds i "vis meddelelse om uskadelige http-fejl"
Avatar billede eagleeye Praktikant
15. januar 2004 - 22:02 #15
hvis din kolonne hedder navn og ikke fornavn skal du nok lige rette denne linje:

Response.Write "<tr><td>" & rs("ForNavn") & "</td>"

Til dette:

Response.Write "<tr><td>" & rs("Navn") & "</td>"
Avatar billede steckel Nybegynder
15. januar 2004 - 22:07 #16
*DOH* det kunne jeg da godt se... nu er det bare sådan at den virker på samme måde som på http://activedeveloper.dk/aspdigital/kapitel2/search.asp . Jeg kan stadig kun skrive en ting. Jeg kan ikke skrive så den leder i flere rækker.
Avatar billede eagleeye Praktikant
15. januar 2004 - 22:10 #17
Lige nu sættet den AND imellem de ting man skriver. Så hvis man skrive Ole Hansen vil den kun finde poster hvor begge ord indgår. Hvis den skal finde alle med Ole og alle med Hansen skal du rette denne linje:

  if sqlWhere <> "" then sqlWhere = sqlWhere & " AND "

Til denne AND->OR:

  if sqlWhere <> "" then sqlWhere = sqlWhere & " OR "
Avatar billede steckel Nybegynder
15. januar 2004 - 22:15 #18
Kanon nu virker det som det skal.... ;) nu må du godt gøre så jeg kan give dig dine poin... ;)
Avatar billede eagleeye Praktikant
15. januar 2004 - 22:16 #19
Ok så svare jeg lige ;)
Avatar billede steckel Nybegynder
15. januar 2004 - 23:05 #20
Hvis du vil kan du så ikke lige hjælpe med http://www.eksperten.dk/spm/452265 ??
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