怎么动态生成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
可提示我越界。我该怎么办?或怎么改?
...全文
186 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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

28,409

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧