22. december 2003 - 19:38Der 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?
-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".
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...
-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.
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
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 & "%'
<% ' 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 %>
-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?)
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>"
<% ' 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 %>
<% ' 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 %>
<<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")
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.