[網友問]
ASP中我怎樣提取 <select multiple name="myfunction">裡面所有的值
<select name="select" size="10" multiple>
<option value="資料集1">資料集1</option>
<option value="資料集2">資料集3</option>
<option value="資料集3">資料集3</option>
<option value="...">...</option>
</select>
這是一個可以在列表框中多項選擇資料的列表框,現在問題是:
怎樣才能實現將列表中多項值提交並得到結果集,並將提交的數值用SQL語句查詢出來呢?請大家給予協助,謝謝!
[griefforyou答]
選擇多項後,提交自動會以逗號隔開資料。
[網友問]
謝謝版主回覆,我用request.form("select")不能將多個選擇的結果集傳遞,況且我要用列表中選擇的資料值來做select查詢,如果在列表中選擇了多個值,具體怎樣得到該值和怎樣用它來做查詢?能具個例子嗎? 盼複!謝謝大家!
[griefforyou答]
<%
if Request.form("Action")<>"" then
sql="select * from table where fieldname in ('" & replace(request.form("select"),", ","','") & "')"
response.write sql
end if
%>
<form name="form1" method="post">
<select name="select" multiple>
<option value="1">---1---</option>
<option value="2">---2---</option>
<option value="3">---3---</option>
<option value="4">---4---</option>
<option value="5">---5---</option>
</select>
<input type="hidden" name="Action" value="提交">
<input type="submit" name="Submit" value="提交">
</form>
我選擇2,3,產生的SQL為
select * from table where fieldname in ('2','3')
[網友問]
可行,但因需要我用的是預存程序,如在列表中選擇一個項目時沒有問題,但兩個以上時會有問題如提示:
Microsoft OLE DB Provider for SQL Server 錯誤 '80040e14' 必須傳遞參數個數 2,並以 '@name = value' 的形式傳遞後續的參數。一旦使用了 '@name = value' 形式之後,所有後續的參數就必須以 '@name = value' 的形式傳遞。
在使用預存程序 select * from table where @fieldname =('" & replace(request.form("select"),", ","','") & "')" 查詢時會出錯誤,原因是 @fieldname 不能一次將多個值賦給預存程序中的變數,只接受單個賦予。
這時可能需要將多個所選擇的列表值存為變數或數組才可以吧? 但又怎樣實現? 煩請再幫忙解答一下好嗎?!
[griefforyou答]
1.數值型欄位的處理
a.預存程序
CREATE PROCEDURE sp_Test(
@id varchar(1000)
) AS
declare @SQL nvarchar(2000)
set @SQL=N'Select * from book where id in(' + @id + ')' --產生SQL語句
EXEC sp_executesql @SQL
GO
b.ASP程式
<%
Dim ConnStr
Dim Cn,Cmd,Rs
Dim ID
if Request.form("Action")<>"" then
'取得使用者提交的查詢條件
ID=replace(request.form("select"),", ",",") '替換時不加單引號
'連接字串
ConnStr="Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=book;Data Source=(local)"
'建立Connection對象
Set Cn=Server.CreateObject("ADODB.Connection")
'串連資料庫
Cn.Open ConnStr
'串連Command對象
Set Cmd=Server.CreateObject("ADODB.Command")
'設定Command對象的串連
Cmd.ActiveConnection=Cn
'設定命令類型為Stored Procedure
Cmd.CommandType=4
'指定預存程序名
Cmd.CommandText="sp_Test"
'設定預存程序參數
Cmd.Parameters.Append cmd.CreateParameter("@id",200,1,1000)
Cmd("@id")= ID '直接賦值給預存程序的參數
'執行存預存程序返回記錄集
set Rs=Cmd.Execute
While Not Rs.Eof
Response.Write Rs("bookname") & " " & Rs("writer") & "<br>"
Rs.MoveNext
Wend
Rs.Close
Set Rs=Nothing
Set Cmd=Nothing
Cn.Close
Set Cn=Nothing
end if
%>
<form name="form1" method="post">
<select name="select" multiple>
<option value="217">---217---</option>
<option value="218">---218---</option>
<option value="3">---3---</option>
<option value="4">---4---</option>
<option value="5">---5---</option>
</select>
<input type="hidden" name="Action" value="提交">
<input type="submit" name="Submit" value="提交">
</form>
2.字元型欄位處理
a.預存程序
CREATE PROCEDURE sp_Test2(
@writer varchar(1000)
) AS
declare @SQL nvarchar(2000)
set @SQL=N'Select * from book where writer in(' + @writer + ')' --產生SQL語句
EXEC sp_executesql @SQL
GO
b.ASP程式
<%
Dim ConnStr
Dim Cn,Cmd,Rs
Dim WRITER
if Request.form("Action")<>"" then
'取得使用者提交的查詢條件
WRITER=replace(request.form("select"),", ","','") '替換時加單引號
'連接字串
ConnStr="Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=book;Data Source=(local)"
'建立Connection對象
Set Cn=Server.CreateObject("ADODB.Connection")
'串連資料庫
Cn.Open ConnStr
'串連Command對象
Set Cmd=Server.CreateObject("ADODB.Command")
'設定Command對象的串連
Cmd.ActiveConnection=Cn
'設定命令類型為Stored Procedure
Cmd.CommandType=4
'指定預存程序名
Cmd.CommandText="sp_Test2"
'設定預存程序參數
Cmd.Parameters.Append cmd.CreateParameter("@writer",200,1,1000)
Cmd("@writer")= "'" & WRITER & "'" '在兩邊再加上一個單引號,然後賦值給預存程序的參數
'執行存預存程序返回記錄集
set Rs=Cmd.Execute
While Not Rs.Eof
Response.Write Rs("bookname") & " " & Rs("writer") & "<br>"
Rs.MoveNext
Wend
Rs.Close
Set Rs=Nothing
Set Cmd=Nothing
Cn.Close
Set Cn=Nothing
end if
%>
<form name="form1" method="post">
<select name="select" multiple>
<option value="席絹">---席絹---</option>
<option value="岑凱倫">---岑凱倫---</option>
<option value="3">---3---</option>
<option value="4">---4---</option>
<option value="5">---5---</option>
</select>
<input type="hidden" name="Action" value="提交">
<input type="submit" name="Submit" value="提交">
</form>
以上程式在Win2000 + IIS5 + SQL Server 2000下測試通過。