注册 登录
编程论坛 ASP技术论坛

问一个先多条件查询然后在批量修改的问题(还未结啊,在线跪求)

xreins 发布于 2010-01-25 10:09, 2224 次点击
我用上页输入的条件,来修改access数据库的记录,但是老是没有修改。我估计应该是数据库查询那块有问题,那个大人帮看看,谢谢了.
数据表见图片:
只有本站会员才能查看附件,请 登录


 
程序代码:
<%
  starttime=request("starttime")
  endtime=request("endtime")
  in0=trim(request("in0"))
  out0=trim(request("out0"))
  namechoice=trim(request("namechoice"))

set rs = server.CreateObject("adodb.recordset")
'sql="select * from tblTurnDay_Detail where date0>=#"&starttime&"# and date0<=#"&endtime&"# and cardid='"&namechoice&"' "
sql="select * from tblTurnDay_Detail where 1=1"
if starttime <>"" then
sql = sql& "and date0 >= #"&starttime&"# "
end if
if endtime <>"" then
sql = sql& "and date0 <= #"&endtime&"# "
end if
if namechoice <>"" then
sql = sql& "and cardid = '"&namechoice&"' "
end if

rs.open sql,conn2,1,3
if rs.eof or rs.bof then
response.Write "没有符合条件的记录"
else
do until rs.eof   
rs("in0") = in0
rs("out0")= out0
rs("strdesc") =""
rs.update
rs.movenext
loop
end if
%>
/** 统计数据 不用看
<table width="95%" border="1" align="center" bordercolor="#FFFFFF" bgcolor="#CCFFCC">
<tr>
<td>姓名</td>
<td>卡号</td>
<td>日期</td>
<td>上班时间</td>
<td>下班时间</td>
<td>考勤状态</td>
<td>备注</td>
</tr>
<%
for i = 1 to rs.recordcount
%>
<tr>
<td><%=rs("cardid")%></td>
<td><%=rs("cardid")%></td>
<td><%=rs("date0")%></td>
<td><%=rs("in0")%></td>
<td><%=rs("out0")%></td>
<td><%=rs("strdesc")%></td>
<td>&nbsp;</td>
</tr>
<%
rs.movenext
if rs.eof then
exit for
end if
next
%>
</table>
<%rs.close
set rs = nothing
conn2.close
set conn2 = Nothing
response.Write "<script language = javascript>alert('Modify success,修改数据统计如下');</script>"
%>




[ 本帖最后由 xreins 于 2010-1-25 21:16 编辑 ]
22 回复
#2
xreins2010-01-25 11:14
自己顶下,怎么只有人看,没有人说话啊
#3
chenguoxing5172010-01-25 13:46
response.write(sql)
看下sql语句输出是什么?
#4
xreins2010-01-25 15:03
select * from tblTurnDay_Detail where 1=1 and date0 >= #2009-12-26# and date0 <= #2010-1-20# and cardid = '651760'
我试了下,response.write sql 输出上面的那一行,但是实际上我数据还是没有修改
#5
xreins2010-01-25 15:07
我补充下,如果我的conn文件里面删除
'on error resume next
这一行,就会提示如下错误
错误类型:
ADODB.Field (0x80020009)
BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
/do.asp
#6
H2010-01-25 15:09
cardid字符型还是整型?
#7
xreins2010-01-25 15:09
只有本站会员才能查看附件,请 登录


这是数据表的图片
#8
xreins2010-01-25 15:10
cardid是文本啊,
#9
xreins2010-01-25 15:22
问题还没解决,自己继续顶一次啊
#10
aspic2010-01-25 15:23
真的好少见 主键用文本类型
#11
xreins2010-01-25 15:28
这个数据库是couns考勤机自带的数据库,我都没改过,我只是连接它啊
#12
xreins2010-01-25 20:14

问题还没解决,自己继续顶一次啊
#13
xreins2010-01-26 11:10
怎么就没人帮我回答下啊
#14
ysf01812010-01-26 11:45
   and 语句多了,一般不超过三个 and。

你可以把 and的条件,用 if then
                       end if来做判断。。。。。

#15
hmhz2010-01-26 13:23
一看就有问题,主键怎么能有两个呢
#16
javaxingxing2010-01-26 14:36
你这是2个主键么?还是联合主键什么的……  
我真没见过
#17
孤独冷雨2010-01-26 15:05
把你查询页面和数据库发上来,帮你测试一下就行了。光靠看和猜,估计难给你一个满意答案!
#18
xreins2010-01-26 15:21
回复 17楼 孤独冷雨
只有本站会员才能查看附件,请 登录


数据库和代码就在附件里面,谢谢了

[ 本帖最后由 xreins 于 2010-1-26 15:56 编辑 ]
#19
孤独冷雨2010-01-26 17:14
程序代码:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<%response.Charset="gb2312"%>
<!--#include file="./conn.asp"-->
  <%
  starttime=request("starttime")
  endtime=request("endtime")
  in0=trim(request("in0"))
  out0=trim(request("out0"))
  namechoice=trim(request("namechoice"))


sql="update tblTurnDay_Detail set in0='"&in0&"',out0='"&out0&"',strdesc='' where 1=1 "

if starttime <>"" then
    sql = sql& "and date0 >= #"&starttime&"# "
end if

if endtime <>"" then
    sql = sql& "and date0 <= #"&endtime&"# "
end if

if namechoice <>"" then
    sql = sql& "and cardid = '"&namechoice&"'"
end if

conn2.execute(sql)





set rs=server.CreateObject("adodb.recordset")

sql="select * from tblTurnDay_Detail where 1=1 "

if starttime <>"" then
    sql = sql& "and date0 >= #"&starttime&"# "
end if

if endtime <>"" then
    sql = sql& "and date0 <= #"&endtime&"# "
end if

if namechoice <>"" then
    sql = sql& "and cardid = '"&namechoice&"'"
end if

rs.open sql,conn2,1,1
if rs.eof or rs.bof then
    response.Write "没有符合条件的记录"
end if
   
%>



<table width="95%" border="1" align="center" bordercolor="#FFFFFF" bgcolor="#CCFFCC">
<tr>
<td>姓名</td>
<td>卡号</td>
<td>日期</td>
<td>上班时间</td>
<td>下班时间</td>
<td>考勤状态</td>
<td>备注</td>
</tr>
<%

for i = 1 to rs.recordcount
%>
<tr>
<td><%=rs("cardid")%></td>
<td><%=rs("cardid")%></td>
<td><%=rs("date0")%></td>
<td><%=rs("in0")%></td>
<td><%=rs("out0")%></td>
<td><%=rs("strdesc")%></td>
<td>&nbsp;</td>
</tr>
<%
rs.movenext
if rs.eof then
exit for
end if
next
%>
</table>

<%
'response.Write sql
rs.close
set rs = nothing
conn2.close
set conn2 = Nothing
response.Write "<script language = javascript>alert('Modify success,修改数据统计如下');</script>"
%>

#20
xreins2010-01-26 18:04
谢谢,代码没问题了,我能不能问下,这是为什么啊,我之前用的
rs.update不行,现在用conn.execute就可以了,能解释下吗,我刚学这个不久,想知道我错在那里啊
#21
孤独冷雨2010-01-27 08:08
自己对照着你的程序好好看一下吧。自己找出来问题所在,比我讲的要好些。并不是conn.execute问题,不要在这个地方钻牛角了!
#22
xreins2010-01-27 15:42
回复 21楼 孤独冷雨
我就是看不出来才问啊,
#23
孤独冷雨2010-01-27 15:57
你那do until循环条件根本不成立,批量修改没有那种写法的,所以会出错。
1