标题:[求助](access) sql语句: where ... in 语句适用范围
只看楼主
dh2007
Rank: 1
等 级:新手上路
帖 子:228
专家分:0
注 册:2007-2-28
结帖率:0
 问题点数:0 回复次数:15 
[求助](access) sql语句: where ... in 语句适用范围
check_str = request("check_str")
arr = Split(check_str,",")
n=ubound(arr)

'response.Write n
dim sh_str
sh_str=""
for i=0 to n
sh_str=arr(i)

set rs1=server.CreateObject("ADODB.Recordset")
sql1="select check from p_news where id=" & sh_str
rs1.open sql1,conn,1,1
if not rs1.bof or rs1.eof then
sql2="update p_news set check=1 where id=" & sh_str
else
response.write "<Script language=javascript>" & chr(13) & "alert('数据库出错!');" & "history.back()" & "</Script>"
end if

conn.execute(sql2) '这行错误
rs1.close
set rs1=nothing
set sql1=nothing
set sql2=nothing
next

Microsoft JET Database Engine (0x80040E14)
UPDATE 语句的语法错误。

[此贴子已经被作者于2007-3-28 11:05:44编辑过]

搜索更多相关主题的帖子: 语句 sql access 范围 
2007-03-28 10:19
做人很低调
Rank: 5Rank: 5
等 级:贵宾
威 望:18
帖 子:1268
专家分:0
注 册:2006-8-2
得分:0 
感觉楼主你做麻烦了

其实我很低调,只是你不知道...
2007-03-28 10:24
做人很低调
Rank: 5Rank: 5
等 级:贵宾
威 望:18
帖 子:1268
专家分:0
注 册:2006-8-2
得分:0 

直接
update table set check=1 where id in(check_str)
不可以么?


其实我很低调,只是你不知道...
2007-03-28 10:25
dh2007
Rank: 1
等 级:新手上路
帖 子:228
专家分:0
注 册:2007-2-28
得分:0 

where .. in 帮我解释下
这是专门用于数组的吗???
如果不是
那就有漏洞了


2007-03-28 10:28
dh2007
Rank: 1
等 级:新手上路
帖 子:228
专家分:0
注 册:2007-2-28
得分:0 
我没用过where ... in 不要笑哈

2007-03-28 10:29
dh2007
Rank: 1
等 级:新手上路
帖 子:228
专家分:0
注 册:2007-2-28
得分:0 
谁能告诉我 where ...in  语句的适用范围

2007-03-28 10:56
dh2007
Rank: 1
等 级:新手上路
帖 子:228
专家分:0
注 册:2007-2-28
得分:0 
sql="update text set check=0 where id in(" & "41,42,43" & ")"
conn.execute(sql)
response.write "成功"

刚才自己做了个实验试了下where ... in 语句,更本不行啊!

2007-03-28 11:20
yms123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
得分:0 

楼主的查询是做什么的?有记录就更新没记录就不更新吗?

2007-03-28 11:34
yms123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
得分:0 

check_str = request("check_str")'获得原是字符串
arr = Split(check_str,",")'用,分割字符串为数组个人猜测的字符串形式"1,2,3,4,5,6,7,8
n=ubound(arr)'求数组长度
dim sh_str'字符串变量
dim tsql'sql语句变量
sh_str=""'初始化字符串变量
tsql="update p_news set check=1 where "'初始化SQL语句变量
for i=0 to n
sh_str=sh_str&"id="&arr(i)&"|"
'字符串循环循环后的字符串变为如下形式
'id=1|id=2|id=3|id=4|id=5|id=6|id=7|id=8|
next
sh_str=mid(sh_str,1,len(sh_str)-1)
'截断字符串把最后的|线去掉变成如下形式
'id=1|id=2|id=3|id=4|id=5|id=6|id=7|id=8
tsql=tsql&replace(sh_str,"|"," Or ")
'将|线替换为Or的SQL逻辑运算符字符串变成如下形式
'id=1 Or id=2 Or id=3 Or id=4 Or id=5 Or id=6 Or id=7 Or id=8
con.execute(tsql)
'执行SQL语句处理后的SQL语句的形势是
'update p_news set check=1 where id=1 Or id=2 Or id=3 Or id=4 Or id=5 Or id=6 Or id=7 Or id=8


'或者更简单的方法甚至不用循环
Dim tsql,check_str
check_str=request("check_str")'获得原是字符串
check_str="id="&replace(check_str,","," Or id=")'加字段
'字符串变成id=1 Or id=2 Or id=3 Or id=4 Or id=5 Or id=6 Or id=7 Or id=8
tsql="update p_news set check=1 where "&check_str'初始化SQL语句变量
con.execute(tsql)'直接执行
'这个方法更简单甚至不用循环即可完成。

[此贴子已经被作者于2007-3-28 11:59:05编辑过]

2007-03-28 11:53
阳光白雪
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:39
帖 子:2220
专家分:0
注 册:2005-11-18
得分:0 
check_str = replace(request("check_str")," ","") ''接收多个元素值时,中间会有空格,应该过滤掉
if not rs1.bof or rs1.eof then
sql2="update p_news set check=1 where id=" & Trim(sh_str)
conn.execute(sql2) '逻辑错误,conn.execute应该放这,能保证sql2有值时才执行
else
response.write "<Script language=javascript>" & chr(13) & "alert('数据库出错!');" & "history.back()" & "</Script>"
end if

PS:SQL中的In 运算符是判断表达式的数值是否等于指定列表中几个数值中的一个,例如:
sql="update text set check=0 where id in(41,42,43)"
则是更新数据表中ID等于41,42,43的三条记录

专注于WEB前端交互平台开发:[url=http://blog./]blog.[/url](富客户端技术(RIA)交流平台)
2007-03-28 11:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-127417-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.139322 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved