webForumDet fria alternativet

Hämta endast valda bokstäver ur DB

ASP

14 svar · 570 visningar · startad av TheMagnus

Medlem sedan juli 2006461 inlägg
Frågan#1

Så här ligger det till:
Jag har en droplista med bokstäver från a till z. Man ska kunna markera flera bokstäver m.h.a. att man håller inne [Ctrl]-knappen alt. [Shift]-knappen. Alltså en <select multiple>.
Nu är jag ingen höjdare på ASP, så jag skulle vilja ha en liten guide på hur man kodar för att lista alla produkter som börjar på de valda bokstäverna?

"SELECT product FROM tabell WHERE product LIKE '" + bokstav + "%' ORDER BY product"

Så långt är jag med, men själva ASP-kodningen är jag ingen fena på, så det skulle vara grymt med en hint eller tre. :)

Medlem sedan dec. 20025 483 inlägg
#2

Om DBMS = MySQL och REGEXP är tillgängligt, kanske följande kan fungera:

select product
  from tabell
 where lcase(product)
regexp '^[" & lcase(replace(request.querystring("select")), ",", "") & "]'
order
    by product
Medlem sedan dec. 19996 721 inlägg
#3

SQL-satsen som TheMagnus skrev var helt OK, så någon regexp behövs inte.

strSQL="SELECT product FROM tabell WHERE 1=0" 
for each item in request("select")
strSQL = strSQL & " OR product LIKE '" & replace(item,"'","''") & "%'"
next

1=0 är en liten fuling, men jag var lat och den fungerar bra

Medlem sedan juni 20003 076 inlägg
#4

Nu var det ju asp´n han ville ha hjälp med så:

Dim objConn, objRs, sql
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.open "Provider_beroende_på_databas"

sql = "SELECT product FROM tabell WHERE product LIKE '" + bokstav + "%' ORDER BY product"

Set objRs = objConn.execute(sql)

Do Until objRs.Eof
     Response.Write(objRs("product") & "<br />")
     objRs.MoveNext
Loop

Set objRs = Nothing
Set objConn = Nothing
Medlem sedan juli 2006461 inlägg
#5

Tack alla, men jag lyckades kanske förklara lite skumt... Jag ska försöka igen. :)

Jag har en lista:
<select name="bokstav" multiple>
<option value="a">A</option>
<option value="b">B</option>
<option value="c">C</option>
...
<option value="z">Z</option>
</select>

Man ska alltså kunna välja flera bokstäver genom att hålla inne [Ctrl]-tangenten. Hur ser kodningen ut för att lista alla som börjar på de tecken man valt då?

Medlem sedan juni 200032 967 inlägg
#6

Har du testat emissions kod?
Se bara till att du gör request på bokstav, så borde nog SQL-frågan byggas upp riktigt.

Medlem sedan juli 2006461 inlägg
#7

Oj fasen, den missade jag ju totalt! :r Ska genast testa denna kodsnutt!

Medlem sedan juli 2006461 inlägg
#8

Hmm, det vill inte fungerar riktigt som jag vill...

Microsoft JScript compilation  error '800a03ed'

Expected '('

/produkter.asp, line 93

for each item in Request("Drop")
----^
<form name="selectcat" method="post" action="produkter.asp">
  <select name="Drop" size=2>
    <option Value="a">A</option>
    <option Value="b">B</option>
    <option Value="c">C</option>
    ...
    <option value="z">Z</option>
</select>
<input type="Submit" name="Go" value="Go">
</form>

<%
var conn=Server.CreateObject("ADODB.Connection");
conn.Provider="Microsoft.Jet.OLEDB.4.0";
conn.Open(Server.MapPath("mindatabas.mdb"));

if (String(Request("Go")) != "undefined") {
	strSQL = "SELECT product FROM industries WHERE 1=0" 
  for each item in Request("Drop")
    strSQL = strSQL & " OR letter LIKE '%" & replace(item,"'","''") & "%'"
  next
  strSQL = strSQL & " ORDER BY product"
  ProductQuerys = conn.execute(strSQL)

  if (ProductQuerys.BOF & ProductQuerys.EOF)
    Response.Write("")
  else {
    while (!ProductQuerys.EOF) {
      Response.Write("<span class='results23'>" + ProductQuerys('product') + "</span><br>\n")
      ProductQuerys.MoveNext();
    }
  }
  Response.Write("<p class='results23'>&nbsp;</p>")
} else {
  Response.Write("<p class='results23'>&nbsp;</p>")
  conn.Close();
}
%>

Tänkte vara lite duktig och placera ut en parentes där han ville ha den, och en på slutet på den raden också, men det ville han inte vara med på serrö!

Microsoft JScript compilation  error '800a03ec'

Expected ';'

/produkter.asp, line 93

for (each item in Request("Drop"))
----------^

Och där vettefasen om det ska vara ett semicolon...? Hjälp! :l

Medlem sedan okt. 20041 556 inlägg
#9

for each item in Request("Drop");

kanske?

Medlem sedan okt. 20041 556 inlägg
#10

...eller, jag vetekatten om du kan göra så i jscript.
Skall du inte även ha krullparenteser med där?

Medlem sedan juli 2006461 inlägg
#11

Nej, fick dessvärre samma fel när jag satte semikolonet där...

Microsoft JScript compilation  error '800a03ec'

Expected ';'

/produkter.asp, line 93

for (each item in Request("Drop"));
----------^

r/

  for (each item in Request("Drop")){
    strSQL = strSQL & " OR letter LIKE '%" & replace(item,"'","''") & "%'";
  }

gav felmeddelandet:

Microsoft JScript compilation  error '800a03ec'

Expected ';'

/produkter.asp, line 93

for (each item in Request("Drop")){
----------^
Medlem sedan juni 200032 967 inlägg
#12

Du skulle kanske ha nämnt att du använder JScript. Byt då från & till + vid konkateneringarna i SQL-frågan.

Och, for-slinga: http://msdn.microsoft.com/library/en-us/script56/html/1b51a0ce-89f7-4a69-88ed-017b47dc398f.asp?frame=true

Konkatenera alltså på samma sätt som du gör i resten av din jscript-kod, och skriv om for-slingan med rätt syntax.

/a

Medlem sedan okt. 20041 556 inlägg
#13

Något åt detta håll:

if (String(Request("Go")) != "undefined") {
var rf = Request("Drop"), strSQL;
strSQL = "SELECT product FROM industries WHERE 1=0";
var e = new Enumerator(rf);
for(; !e.atEnd(); e.moveNext())
{
    strSQL = strSQL + " OR letter LIKE '%" + e.item().replace("'","''") + "%'"
}
  strSQL = strSQL + " ORDER BY product";
  ProductQuerys = conn.execute(strSQL);
.....
Medlem sedan juli 2006461 inlägg
#14

@nders: Hade jag vetat det så hade jag berättat det. :r Är som sagt inte ASP'are i vanliga fall. PHP är mer min melodi, men ibland får man se sig som en svikare och lämna över sig till fienden... :e

Travoni: Tack! du är dagens hjälte! :bire

Medlem sedan dec. 19996 721 inlägg
#15

Ok, då rekommenderar jag starkt att du går över till VBScript i stället för JScript. Inte för att det är bättre, för det är det inte, men för att 99,9% av all ASP skrivs i VBScript och det blir lättare att få hjälp.

266 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)