Avatar billede w13 Novice
22. december 2003 - 19:38 Der er 31 kommentarer og
1 løsning

Søge i database

-Jeg er ikke specielt god til ASP endnu, og håber derfor, nogen kan hjælpe mig med nedenstående og forklare det på begynderplan...

-Jeg har fået oprettet en form, som brugeren kan udfylde og klikke "indsend", og derefter bliver de indskrevne data gemt i en database. Nu har jeg så brug for en ny side med næsten samme formular (5 felter),  hvor man kan udfylde en eller flere af felterne og trykke "søg", hvorefter den på skærmen viser de gemte "annoncer", som passer til de udfyldte søgekriterier... (Hvis ingen felter er udfyldt, skal den skrive, at søgningen ikke kunne gennemføres...) Nogen, som mener, de kan hjælpe med det?

-På forhånd tak...
  w13
Avatar billede keysersoze Ekspert
22. december 2003 - 19:41 #1
Avatar billede w13 Novice
22. december 2003 - 19:52 #2
-Der er der jo kun eet søgefelt...
Avatar billede medions Nybegynder
22. december 2003 - 19:59 #3
Set objConn = SErver.CreateObject("ADODB.Connection")
objConn.Open "Driver={Microsoft Access Driver (*.mdb)};" & Server.MapPath("db/db1.mdb")

strSQL = "SELECT Feltnavn FROM tblTabelnavn WHERE (Feltnavn LIKE '%" & Request.Form("SearchField") & "%')"
Set objRs = objConn.Execute(strSQL)

While Not objRs.EOF
    Response.Write(objRs("Feltnavn") & "<br />")
objRs.MoveNext()
Wend

//>Rune
Avatar billede keysersoze Ekspert
22. december 2003 - 20:14 #4
ja - men så udbygger du bare med flere søgefelter og tilsvarende udbygger du din SQL-forespørgsel
Avatar billede w13 Novice
22. december 2003 - 20:28 #5
-Lige nu virker det ikke, men det giver mig alligevel også nogle problemer...

-Hvis der i søgefeltet "navn" ikke er skrevet noget (det vil altså sige, at der stadig står "Skriv dit navn" i feltet) så vilden også søge på "Skriv dit navn".
Avatar billede keysersoze Ekspert
22. december 2003 - 20:38 #6
Ja - det er korrekt. Men så må du enten lade være med at indtaste en default value, eller lade en If-sætning på søgesiden erstatte "Skriv dit navn" med ingenting...
Avatar billede w13 Novice
22. december 2003 - 20:57 #7
-Jeg har nu undersøgt det lidt nærmere, og jeg har fundet ud af, at dette især volder mig problemer: << strKeyword = Trim(Request.Form("Keyword")) >>

-"Keyword" er navnet på det ene tekstfelt, som var i den originale version... Men jeg har jo netop flere felter...!?

-Er der ikke nogen, som kan give mig et færdigt eksempel? Altså sætte det hele rigtigt ind... Man skal kunne søge på: "Alder", "køn", "amt", "kommune" og "jobønske", og siden, man kommer hen til, skal så vise dem, som passede til de indtastede kriterier, men samtidig, skal der for hver bruger også vises: "Navn", "alder" og "ansøgning".

-Er det meget svært at lave? Hvis nogen gider lave det for mig får de de 200 point.

W13
Avatar billede medions Nybegynder
22. december 2003 - 21:08 #8
Hør her, det er præcist det jeg har givet dig...!

Set objConn = SErver.CreateObject("ADODB.Connection")
objConn.Open "Driver={Microsoft Access Driver (*.mdb)};" & Server.MapPath("db/db1.mdb")

strSQL = "SELECT Feltnavn FROM tblTabelnavn WHERE (Feltnavn LIKE '%" & Request.Form("SearchField") & "%') AND alder = " & REquest.Form("Alder") & " AND Kon = '" & Request.Form("Kon") & "'"
Set objRs = objConn.Execute(strSQL)

While Not objRs.EOF
    Response.Write(objRs("Feltnavn") & "<br />")
    Response.Write(objRs("Alder") & "<br />")
    Response.Write(objRs("køn") & "<br />")
objRs.MoveNext()
Wend

Du skal blot bygge det ud med flere linjer!

//>Rune
Avatar billede keysersoze Ekspert
22. december 2003 - 21:11 #9
jeg ved ikke med andre - men jeg vil ikke lave det for dig, kun hjælpe. Og så er det lidt lettere at hjælpe hvis man ved hvad præcist der forvolder dig problemer.

Du siger at følgende er et problem;

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

Det eneste der sker der er, at man tager indholdet fra formen "keyword" og putter ned i en variabel man kalder strkeyword. Vil du have initialiseret flere ting gør du bare det;

strKeyword2 = Trim(Request.Form("Keyword2"))
Bent = Trim(Request.Form("finn"))
andeby = Trim(Request.Form("julestjern"))

og så kan du benytte de initialiserede variabler i din SQL-sætning som du vil

SELECT * FROM dintabel WHERE navn LIKE '%" & Bent & "%' AND nogetandet = '%" & andeby & "%'
Avatar billede w13 Novice
22. december 2003 - 21:18 #10
Medions>> Jeg er for dum til at kunne finde ud af at sætte flere linjer på...

Men jeg kan da give jer min kode... Så kan i måske finde ud af, hvad jeg gør galt... 2 sek.
Avatar billede w13 Novice
22. december 2003 - 21:21 #11
(Jeg gik over til kun at bruge et søgefelt alligevel...)

Dette er siden Sog.htm :

<html><head>
</head><body>

<form action="sog.asp" method="POST">
<input type="text" name="Keyword" size="20"><br>
<input type="submit" name="Action" value="Søg">
</form>

</body></html>


Dette er siden Sog.asp :
Avatar billede w13 Novice
22. december 2003 - 21:21 #12
<% Response.Buffer = True %>
<html><head>
<title></title>
</head>
<body>

<%
' Henter værdien fra sog.htm
strKeyword = Trim(Request.Form("Keyword"))

If Len(strKeyword) = 0 Then
    ' Hvis der ikke er skrevet i feltet
    Response.Clear
    Response.Redirect("sog.htm")
Else
    ' Hvis der er skrevet i feltet
    strKeyword = Replace(strKeyword,"'","''")
End If

' Opbygger en dynamisk SQL streng
strSQL = "SELECT brugernavn, navn, email, alder, kon, amt, kommune, job, ansogning FROM ansogning WHERE"
strSQL = strSQL & " (navn LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (email LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (alder LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (kon LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (amt LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (kommune LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (job LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (ansogning LIKE '%" & strKeyword & "%')"

' Skaber DSNLess forbindelse til DBen
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("ansogning.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>Søgeresultat</p>"
    Response.Write "<table border=1>"
    Response.Write "<tr><th>Navn</th><th>Email</th><th>Alder</th><th>Køn</th><th>Amt</th><th>Kommune</th><th>Jobønske</th><th>Ansøgning</th></tr>"
    Do While Not rs.EOF
        Response.Write "<tr><td>" & rs("navn") & "</td>"
        Response.Write "<td>" & rs("email") & "</td>"
        Response.Write "<td>" & rs("alder") & "</td>"
        Response.Write "<td>" & rs("kon") & "</td>
        Response.Write "<td>" & rs("amt") & "</td>
        Response.Write "<td>" & rs("kommune") & "</td>
        Response.Write "<td>" & rs("job") & "</td>
        Response.Write "<td>" & rs("ansogning") & "</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
%>

</body></html>
Avatar billede medions Nybegynder
22. december 2003 - 21:28 #13
Jeg vil nu støtte keysersoze, jeg gider ik' lave det for dig, men jeg vil godt hjælpe, det er eksperten er for!

Hvis jeg skal lave det hele for dig bliver det over sharksforum.dk og så bliver det med betaling...

//>Rune
Avatar billede w13 Novice
22. december 2003 - 21:35 #14
-Okey, så... Jeg går med til at blive guidet... Problemet er bare, at jeg ikke fatter særlig meget af det... Det er derfor, jeg spørger her på Eksperten.dk... Men kan i spotte fejlen i ovenstående kode? (Når jeg indtaster noget i søgefeltet siger den "Siden kunne ikke vises"... Hvad gør jeg galt?)
Avatar billede keysersoze Ekspert
22. december 2003 - 21:44 #15
hvilken fejl får du?
Avatar billede w13 Novice
22. december 2003 - 21:46 #16
"Der opstod en intern HTTP 500-serverfejl"!
Avatar billede keysersoze Ekspert
22. december 2003 - 22:29 #17
funktioner -> internetindstillinger -> avanceret -> fjern kryds i "vis meddelelse om uskadelige http-fejl"

Gør det - så får du en fejlbesked du kan bruge til noget
Avatar billede w13 Novice
22. december 2003 - 22:50 #18
Microsoft VBScript compilation error '800a0409'

Unterminated string constant

/sog.asp, line 47

Response.Write "<td>" & rs("kon") & "</td>
------------------------------------------^

Ja, så ved jeg da HVOR det er glat... Men hvad er "Unterminated string constant" ?
Avatar billede w13 Novice
22. december 2003 - 22:50 #19
Ups... "GALT", ikkke "glat"...
Avatar billede w13 Novice
22. december 2003 - 22:53 #20
Sådan.. Jeg har løst det nu... Men nu får jeg en ny fejl... Ser lige, om jeg selv kan rette den...
Avatar billede w13 Novice
22. december 2003 - 22:56 #21
Den siger:

Microsoft VBScript runtime error '800a01a8'

Object required: 'myConn'

/sog.asp, line 39


Der er en fejl et sted heri:

strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("ansogning.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
Avatar billede medions Nybegynder
23. december 2003 - 10:23 #22
Prøv sådan her:
Set myConn = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("ansogning.mdb")
myConn.Open strDSN

' Skaber et recordset udfra SQL strengen
Set rs = myConn.Execute(strSQL)

//>Rune
Avatar billede w13 Novice
23. december 2003 - 12:45 #23
-Nope... Stadig fejl...

<<ADODB.Recordset error '800a0e78'

Operation is not allowed when the object is closed.

/sog.asp, line 39>>

(Linje 39 er heromkring:

' 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>Søgeresultat</p>"
    Response.Write "<table border=1>"
Avatar billede medions Nybegynder
23. december 2003 - 12:46 #24
Lad mig lige se hele din kode....!

//>Rune
Avatar billede w13 Novice
23. december 2003 - 12:48 #25
Siden "Sog.htm":

<html><head>
<title></title>
</head><body bgcolor="#9FB7C0">

<font face="verdana" color="#497383" size="2">
<form action="sog.asp" method="POST">
<b>Herunder kan du søge:<br>
</b><br>
<input type="text" name="Keyword" size="20"><br>
<br>
<input type="submit" name="Action" value="Søg">
</form></font>

</body></html>


Og siden "Sog.asp":

<% Response.Buffer = True %>
<html><head>
<title></title>
</head>
<body bgcolor="#9FB7C0">

<%
' Henter værdien fra sog.htm
strKeyword = Trim(Request.Form("Keyword"))

If Len(strKeyword) = 0 Then
    ' Hvis der ikke er skrevet i feltet
    Response.Clear
    Response.Redirect("sog.htm")
Else
    ' Hvis der er skrevet i feltet
    strKeyword = Replace(strKeyword,"'","''")
End If

' Opbygger en dynamisk SQL streng
strSQL = "SELECT brugernavn, navn, email, alder, kon, amt, kommune, job, ansogning FROM ansogning WHERE"
strSQL = strSQL & " (navn LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (email LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (alder LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (kon LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (amt LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (kommune LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (job LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (ansogning LIKE '%" & strKeyword & "%')"

' Skaber DSNLess forbindelse til DBen
Set myConn = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("ansogning.mdb")
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>Søgeresultat</p>"
    Response.Write "<table border=1>"
    Response.Write "<tr><th>Navn</th><th>Email</th><th>Alder</th><th>Køn</th><th>Amt</th><th>Kommune</th><th>Jobønske</th><th>Ansøgning</th></tr>"
    Do While Not rs.EOF
        Response.Write "<tr><td>" & rs("navn") & "</td>"
        Response.Write "<td>" & rs("email") & "</td>"
        Response.Write "<td>" & rs("alder") & "</td>"
        Response.Write "<td>" & rs("kon") & "</td>"
        Response.Write "<td>" & rs("amt") & "</td>"
        Response.Write "<td>" & rs("kommune") & "</td>"
        Response.Write "<td>" & rs("job") & "</td>"
        Response.Write "<td>" & rs("ansogning") & "</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
%>

</body></html>
Avatar billede medions Nybegynder
23. december 2003 - 12:52 #26
Prøv lige sådan her:


<% Response.Buffer = True %>
<html><head>
<title></title>
</head>
<body bgcolor="#9FB7C0">

<%
' Henter værdien fra sog.htm
strKeyword = Trim(Request.Form("Keyword"))

If Len(strKeyword) = 0 Then
    ' Hvis der ikke er skrevet i feltet
    Response.Clear
    Response.Redirect("sog.htm")
Else
    ' Hvis der er skrevet i feltet
    strKeyword = Replace(strKeyword,"'","''")
End If

' Opbygger en dynamisk SQL streng
strSQL = "SELECT brugernavn, [navn], email, alder, kon, amt, kommune, job, ansogning FROM ansogning WHERE"
strSQL = strSQL & " ([navn] LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (email LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (alder LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (kon LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (amt LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (kommune LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (job LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (ansogning LIKE '%" & strKeyword & "%')"

' Skaber DSNLess forbindelse til DBen
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("ansogning.mdb")

' 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>Søgeresultat</p>"
    Response.Write "<table border=1>"
    Response.Write "<tr><th>Navn</th><th>Email</th><th>Alder</th><th>Køn</th><th>Amt</th><th>Kommune</th><th>Jobønske</th><th>Ansøgning</th></tr>"
    Do While Not rs.EOF
        Response.Write "<tr><td>" & rs("navn") & "</td>"
        Response.Write "<td>" & rs("email") & "</td>"
        Response.Write "<td>" & rs("alder") & "</td>"
        Response.Write "<td>" & rs("kon") & "</td>"
        Response.Write "<td>" & rs("amt") & "</td>"
        Response.Write "<td>" & rs("kommune") & "</td>"
        Response.Write "<td>" & rs("job") & "</td>"
        Response.Write "<td>" & rs("ansogning") & "</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
%>

</body></html>

//>Rune
Avatar billede w13 Novice
23. december 2003 - 12:57 #27
-Desværre...:

<<Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key 'Temporary (volatile) Jet DSN for process 0xb20 Thread 0xbd0 DBC 0x45a724 Jet'.

/sog.asp, line 33>>



Linje 33 er vist nok dette:

' Skaber DSNLess forbindelse til DBen
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("ansogning.mdb")
Avatar billede w13 Novice
23. december 2003 - 12:58 #28
-Nej.... Nu virker den... Tak...
Avatar billede medions Nybegynder
23. december 2003 - 13:01 #29
And maybe you should accept allso?

//>Rune
Avatar billede w13 Novice
23. december 2003 - 13:05 #30
God ide... Jeg skulle lige tjekke om den virkede helt, og det gjorde den...
Avatar billede keysersoze Ekspert
23. december 2003 - 13:18 #31
tak for linket - og tak for hjælpen undervejs
Avatar billede keysersoze Ekspert
23. december 2003 - 14:04 #32
... men sådan noget tæller åbenbart ikke
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