怎么动态生成SQL语句?

celeron831 2002-07-26 05:54:54
我想这样做:上面显示若干个复选框,从中选择多个城市名。然后查询SQL语句想生成如下这样:
SELECT * FROM 数据库名 WHERE 城市=‘北京’ OR 城市=‘上海’ OR 城市=‘大连’
其中,北京、上海、大连为上面复选框中所选内容。请问我该怎么办?
我现在的做法为:

sql="select * from customers where "
sqlwherepart=""
for each 城市 in request.form("城市")
sqlwherepart=sqlwherepart&" 城市= '"&城市&"' or"
next
sql=sql&sqlwherepart
可这明显不对,最后生成的SQL语句的结尾多一个or
另一种做法为:

strl=request.form("城市")
aryN=split(strl,",")
sql="select * from customers where "
sqlwherepart=""
For i=0 to (UBound(aryN)-1)
sqlwherepart=sqlwherepart&" 城市= '"&aryN(i+1)&"' or"
Next
qlwherepart=sqlwherepart&" 城市= '"&aryN(i)&"'"
sql=sql&sqlwherepart
可提示我越界。我该怎么办?或怎么改?
...全文
122 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiushuiwuhen 2002-07-30
低版本中文需要[],如[城市]
回复
celeron831 2002-07-30
首先非常感谢秋水无恨(同学、同志?)可说一下我的新问题:
我的程序:
sql="select * from customers where "
sqlwherepart=""
for each cs in request.form("cs")
if sqlwherepart <> "" then
sqlwherepart=sqlwherepart&" or "
sqlwherepart=sqlwherepart&" 城市= '"&cs&"' "
else
sqlwherepart=sqlwherepart&" 城市= '"&cs&"' "
end if
next
sql=sql&sqlwherepart
response.write sql
SET RS=DBCONNECTION.EXECUTE(sql)

若不写SET RS=DBCONNECTION.EXECUTE(sql)这行,sql语句为select * from customers where 城市='北京' or 城市='武汉' or 城市='上海' 这没错吧。可是若写上SET RS=DBCONNECTION.EXECUTE(sql)就提示where子句语法错误。这是怎么回事?

回复
qiushuiwuhen 2002-07-29

上面的方法均本地测试通过,但要多说一句的话:
为了安全起见,拼凑sql的时候,需要检验提交的数据
回复
qiushuiwuhen 2002-07-29
第二种错误是因为城市是中文,所以要改为city
<%
set con=Server.CreateObject("ADODB.Connection")
con.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("db.mdb"))
set rs=Server.CreateObject("ADODB.Recordset")
if request.form("task")<>"" then

sql="select * from customers where "
sqlwherepart=""
for each city in request.form("城市")
if sqlwherepart<>"" then sqlwherepart= sqlwherepart & " or"
sqlwherepart=sqlwherepart&" 城市= '"&city&"'"
next
sql=sql&sqlwherepart

response.write sql
rs.open sql,con
do until rs.eof
response.write rs(1)
rs.movenext
loop

rs.close
end if

rs.open "Select * From customers",con
response.write "<form method=post>"
do until rs.eof
response.write "<input type=checkbox name=城市 value=""" & rs(2) &""">" & rs(2)
rs.movenext
loop
response.write "<input type=submit name=task value=go></form>"
%>

回复
qiushuiwuhen 2002-07-29
第一种需要在提交的checkbox中加单引号,如value="'上海'"
<%
set con=Server.CreateObject("ADODB.Connection")
con.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("db.mdb"))
set rs=Server.CreateObject("ADODB.Recordset")
if request.form("task")<>"" then
sql= "select * from customers where 城市 in (" & request.form("城市") & ")"
response.write sql
rs.open sql,con
do until rs.eof
response.write rs(1)
rs.movenext
loop

rs.close
end if

rs.open "Select * From customers",con
response.write "<form method=post>"
do until rs.eof
response.write "<input type=checkbox name=城市 value=""'" & rs(2) &"'"">" & rs(2)
rs.movenext
loop
response.write "<input type=submit name=task value=go></form>"
%>

回复
sdly 2002-07-29

"select * from customers where 城市 in (" & 城市列表 & ")"

城市列表形式 ----〉 'a','b','c'
回复
celeron831 2002-07-29
秋水无恨的方法我都试了,都有错误。蓝鹰的方法我不懂。
回复
lanying 2002-07-26
用一个隐藏域传递选中城市的个数
在服务器段对只有一个城市的情况作特殊处理
回复
lanying 2002-07-26
用一个隐藏域传递选中城市的个数
在服务器段对只有一个城市的情况作特殊处理
回复
qiushuiwuhen 2002-07-26

"select * from customers where 城市 in (" & request.form("城市") & ")"



sql="select * from customers where "
sqlwherepart=""
for each 城市 in request.form("城市")
if sqlwherepart<>"" then sqlwherepart= sqlwherepart & " or"
sqlwherepart=sqlwherepart&" 城市= '"&城市&"'"
next
sql=sql&sqlwherepart
回复
发动态
发帖子
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
社区公告
暂无公告