Avatar billede superagentdk Nybegynder
04. maj 2003 - 19:01 Der er 13 kommentarer og
1 løsning

Hvordan laver man en "svær" søgning?

Jeg har denne kode:

-------------------

<form action="bs_resultat.asp" method="post">

      <p><font face="Arial" size="2"><b>Placering udfra amt: </b></font></p>
 
          <select name="amt" class="felter">
            <option value="Bornholm" >Bornholm</option>
            <option value="Frederiksborg" >Frederiksborg</option>
            <option value="Fyn" >Fyn</option>
            <option value="København" >København</option>
            <option value="Nordjylland" >Nordjylland</option>
            <option value="Ribe" >Ribe</option>
            <option value="Ringkjøbing" >Ringkjøbing</option>
            <option value="Roskilde" >Roskilde</option>
            <option value="Storstrøm" >Storstrøm</option>
            <option value="Sønderjylland" >Sønderjylland</option>
            <option value="Vestsjælland" >Vestsjælland</option>
            <option value="Vejle" >Vejle</option>
            <option value="Viborg" >Viborg</option>
            <option value="Århus" >Århus</option>
                  </select>
     
      <p><font face="Arial" size="2"><b>Kvadratmeter: </b></font></p>

      <font face="Arial" size="2">
      Mindst:<input type="text" name="kvm_min" size="3">&nbsp; Højst:</font><font face="Arial" size="2"><input type="text" name="kvm_max" size="3"></font>       
               
     
      <p><font face="Arial" size="2"><b>Pris pr. mdr.: </b></font></p>

      <font face="Arial" size="2">
      Mindst:<input type="text" name="kvm_min" size="5">&nbsp; Højst:</font><font face="Arial" size="2"><input type="text" name="kvm_max" size="5"></font>       
               
                <br><br> <input type="submit" value="Se ledige boliger" name="se" class="knap">
            </form>

-------------------

Inde på siden bs_resultat.asp ønsker jeg at få et database udtræk som viser alle de bolig som passer til søgningen.
Er det muligt at lave på en smart måde?

Tabellen hedder: fpdb/boliger.mdb (access)

På forhånd tak!
Avatar billede medions Nybegynder
04. maj 2003 - 19:05 #1
Her har du en tutorial til hvordan du gør:

http://activedeveloper.dk/aspdigital/kapitel2/search.asp

//>Rune
Avatar billede eagleeye Praktikant
04. maj 2003 - 19:47 #2
Ja det er muligt. Du kan bygge på ved at sætte AND mellem de forskellige oplysninger også kun tilføje dem som man har valgt samt huske rigtig tegn > og <.:


Du skal lige være opmærksom på at du har give flere fleter samme navn. Pris pr månede hedder også kvm_min og kvm_max, her er har lavet navne om til pris_min og pris_max:

<p><font face="Arial" size="2"><b>Pris pr. mdr.: </b></font></p>

      <font face="Arial" size="2">
      Mindst:<input type="text" name="pris_min" size="5">&nbsp; Højst:</font><font face="Arial" size="2"><input type="text" name="pris_max" size="5"></font>


Jeg har antager du disse kolonner samt datatype:
Kolonnennavn  :  data type
amt  :  tekst
kvm  :  tal
pris :  tal

Her er koden så du skal så selv rette i Connection til databasen og lave udskrivning:



amt = Request.Form("amt")
kvm_min = Request.Form("kvm_min")
kvm_max = Request.Form("kvm_max")
pris_min = Request.Form("pris_min")
pris_max = Request.Form("pris_max")

sqlWHERE = ""
if amt <> "" then
  if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND "
  sqlWHERE = sqlWHERE & "(amt = '" & amt & "')"
end if
if kvm_min <> "" then
  if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND "
  sqlWHERE = sqlWHERE & "(kvm >= " & kvm_min & ")"
end if
if kvm_max <> "" then
  if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND "
  sqlWHERE = sqlWHERE & "(kvm <= " & kvm_max & ")"
end if
if pris_min <> "" then
  if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND "
  sqlWHERE = sqlWHERE & "(pris >= " & pris_min & ")"
end if
if pris_max <> "" then
  if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND "
  sqlWHERE = sqlWHERE & "(pris <= " & pris_max & ")"
end if

SQL = "SELECT * FROM fpdb"
if sqlWHERE <> "" then SQL = SQL & " " & sqlWHERE

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

Set rs = Conn.Execute (SQL)

do while not rs.EOF
  'UDSKRIV HER
 
  rs.MoveNext
loop
Avatar billede superagentdk Nybegynder
05. maj 2003 - 13:39 #3
Jeg har lavet det om til dette:


<!-- #Include file="include/top.asp" -->


<table>

<tr>
    <td align="center"><img src="images/titlebar_bs.gif" width="778" height="46"></td>
</tr>

<tr>
    <td align="center">
<br>


<div align="right">
  <table border="0" width="580" cellspacing="0" cellpadding="0">
    <tr>
      <td width="387">

<table border="0" width="386" cellspacing="0" cellpadding="0">
  <tr>
    <td height="29" width="387">  <img border="0" src="images/menubar.gif" width="387" height="29"></td>
  </tr>
  <tr>
    <td bgcolor="#EFEFEF" width="386"><font face="Arial" size="2"><b>Resultat af din søgning</b></font>
<br><br>

<%


amt = Request.Form("amt")
kvm_min = Request.Form("kvm_min")
kvm_max = Request.Form("kvm_max")
pris_min = Request.Form("pris_min")
pris_max = Request.Form("pris_max")

sqlWHERE = ""
if amt <> "" then
  if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND "
  sqlWHERE = sqlWHERE & "(amt = '" & amt & "')"
end if
if kvm_min <> "" then
  if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND "
  sqlWHERE = sqlWHERE & "(kvm >= " & kvm_min & ")"
end if
if kvm_max <> "" then
  if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND "
  sqlWHERE = sqlWHERE & "(kvm <= " & kvm_max & ")"
end if
if pris_min <> "" then
  if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND "
  sqlWHERE = sqlWHERE & "(pris >= " & pris_min & ")"
end if
if pris_max <> "" then
  if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND "
  sqlWHERE = sqlWHERE & "(pris <= " & pris_max & ")"
end if

SQL = "SELECT * FROM boliger"
if sqlWHERE <> "" then SQL = SQL & " " & sqlWHERE

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("fpdb/bolig.mdb")

Set rs = Conn.Execute (SQL)

do while not rs.EOF
  'UDSKRIV HER

%>


<b> Adresse:</b> <%=RS("boligaddresse")%> <br>
<b> By:  </b> <%=RS("boligpostnummer")%> <%=RS("boligcity")%> <br>
<b> Pris:</b> <%=RS("pris")%> <br>
<b> Kvm:</b> <%=RS("kvm")%> <br>

<hr>



 
<% 
  rs.MoveNext
loop

%>


    </td>
  </tr>
</table>


<!--#Include file="include/bund.asp" -->

-----------------------------------------


Men jeg får en fejl:
Microsoft JET Database Engine error '80040e14'

Syntax error in FROM clause.

/ve/bolig/resultat.asp, line 65

:-( Hvordan laves dettes

En anden ting: i dette script er det så muligt at ikke f.eks. udfylde kvm??

tak!
Avatar billede superagentdk Nybegynder
05. maj 2003 - 13:40 #4
ps. db'en hedder fpdb/bolig.mdb
og tabllen hedder "boliger"
Avatar billede -mundi- Nybegynder
05. maj 2003 - 13:41 #5
response.write sql
response.end
'Set rs = Conn.Execute (SQL)

og så post den sql der skrives ud
Avatar billede superagentdk Nybegynder
05. maj 2003 - 14:41 #6
-mundi->> Hvor skal det sættes ind henne?
Avatar billede -mundi- Nybegynder
05. maj 2003 - 14:43 #7
istedet for
Set rs = Conn.Execute (SQL)
Avatar billede eagleeye Praktikant
05. maj 2003 - 18:21 #8
En anden ting: i dette script er det så muligt at ikke f.eks. udfylde kvm??

Ja den medtager kun de ting som er udfylt i felterne.


Fejlen kommer typsik fordi enten en kolonne er stavet/skrevte forkert eller for man har forkert datatype i sin SQL WHERE del.

Bemærk det jeg skrev i svaret:
Jeg har antager du disse kolonner samt datatype:
Kolonnennavn  :  data type
amt  :  tekst
kvm  :  tal
pris :  tal

Så hedder dine kolonner det samme ?
Samt er det rigtig datatype ?
Avatar billede eagleeye Praktikant
08. maj 2003 - 22:32 #9
Hvis du fortæller hvad dinek kolonner hedder samt hvilken data type det i databasen så kan vi lettere hjælpe med at få tilpasset din SQL sætning.
Avatar billede superagentdk Nybegynder
09. maj 2003 - 14:35 #10
undskyld at jeg ikke har haft tid til at skrive en kommentar!

Du kan se min db her:
http://students.aabc.dk/ve/bolig/bolig.mdb

Den rigtige db ligger under:
http://students.aabc.dk/ve/bolig/fpdb/bolig.mdb
(som der står i scriptet)

Du kan se siden her:
http://students.aabc.dk/ve/bolig/bs.asp

Den laver stadig en fejl, kan du finde den?
Avatar billede superagentdk Nybegynder
09. maj 2003 - 14:36 #11
Du kan naturligvis også få hele koden til resultat.asp


<!-- #Include file="include/top.asp" -->


<table>

<tr>
    <td align="center"><img src="images/titlebar_bs.gif" width="778" height="46"></td>
</tr>

<tr>
    <td align="center">
<br>


<div align="right">
  <table border="0" width="580" cellspacing="0" cellpadding="0">
    <tr>
      <td width="387">

<table border="0" width="386" cellspacing="0" cellpadding="0">
  <tr>
    <td height="29" width="387">  <img border="0" src="images/menubar.gif" width="387" height="29"></td>
  </tr>
  <tr>
    <td bgcolor="#EFEFEF" width="386"><font face="Arial" size="2"><b>Resultat af din søgning</b></font>
<br><br>

<%


amt = Request.Form("amt")
kvm_min = Request.Form("kvm_min")
kvm_max = Request.Form("kvm_max")
pris_min = Request.Form("pris_min")
pris_max = Request.Form("pris_max")

sqlWHERE = ""
if amt <> "" then
  if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND "
  sqlWHERE = sqlWHERE & "(amt = '" & amt & "')"
end if
if kvm_min <> "" then
  if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND "
  sqlWHERE = sqlWHERE & "(kvm >= " & kvm_min & ")"
end if
if kvm_max <> "" then
  if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND "
  sqlWHERE = sqlWHERE & "(kvm <= " & kvm_max & ")"
end if
if pris_min <> "" then
  if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND "
  sqlWHERE = sqlWHERE & "(pris >= " & pris_min & ")"
end if
if pris_max <> "" then
  if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND "
  sqlWHERE = sqlWHERE & "(pris <= " & pris_max & ")"
end if

SQL = "SELECT * FROM boliger"
if sqlWHERE <> "" then SQL = SQL & " " & sqlWHERE

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("fpdb/bolig.mdb")

response.write sql
response.end
'Set rs = Conn.Execute (SQL)

do while not rs.EOF
  'UDSKRIV HER



%>


<b> Adresse:</b> <%=RS("boligaddresse")%> <br>
<b> By:  </b> <%=RS("boligpostnummer")%> <%=RS("boligcity")%> <br>
<b> Pris:</b> <%=RS("pris")%> <br>
<b> Kvm:</b> <%=RS("kvm")%> <br>

<hr>



 
<% 
  rs.MoveNext
loop

%>


    </td>
  </tr>
</table>


<!--#Include file="include/bund.asp" -->
Avatar billede eagleeye Praktikant
09. maj 2003 - 16:08 #12
Jeg har lige set en ting, der mangler ordet WHERE så prøv at rette dette:

SQL = "SELECT * FROM boliger"
if sqlWHERE <> "" then SQL = SQL & " " & sqlWHERE

Til:

SQL = "SELECT * FROM boliger"
if sqlWHERE <> "" then SQL = SQL & " WHERE " & sqlWHERE
Avatar billede eagleeye Praktikant
09. maj 2003 - 16:11 #13
Når du hare rettet det som er i min sidste kommentar så ret disse 3 linjer for at udføre SQL igen.

response.write sql
response.end
'Set rs = Conn.Execute (SQL)

Til:

'response.write sql
'response.end
Set rs = Conn.Execute (SQL)
Avatar billede superagentdk Nybegynder
11. maj 2003 - 12:36 #14
Mange tak! Nu virker det!
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