我提前为这个问题道歉 - 但我没有经典ASP的经验,虽然我已经尝试过,但我无法理解。
我已经完成了调整现有系统的任务(直到找到替代品),这是用ASP / VBScript编写的。
我面临的问题是,当我使用SQL检索某些数据时,我无法让脚本将结果更新到表中。每次运行查询时,结果数都会发生变化。
例如;表中的数据计算某人缺席的时间,每次有人不在时,它会在一个字段中记录持续时间,在另一个字段中记录日期,在另一个字段中记录一个value = 1
。
这部分有效。
我要做的是整理每个日期的总持续时间缺席,并将该数据插入到value = 2
的同一个表中。
代码:
Set rssum = conn.execute("select sum(total) as total, visitdate from table_1 where repid=" & session("repid") & " and type=1 group by visitdate ")
If rssum.eof Then
While Not rssum.eof
rstotal=rssum("total")
rstotal=rssum("visitdate")
'some code to generate nextid
Set abrec = conn.execute(insert into table_1 (abid,repid,type,visitdate,total) values(" & nextid & ", " & session("repid") & ",2,'" & visitdate & "'," & total & ")
Wend
rssum.movenext
rssum.close
Set rssum = Nothing
End If
当我运行脚本并说我正在计算2天的数据时,它会返回2个type=2
条目,但会复制第一个日期的日期。
为什么会这样?
答案 0 :(得分:3)
movenext需要在循环结束时,但在循环内。否则它将无限期重复。我很惊讶你没有得到无限循环。
while not rssum.eof
rstotal=rssum("total")
rstotal=rssum("visitdate")
'some code to generate nextid
set abrec = conn.execute(insert into table_1 (abid,repid,type,visitdate,total) values(" & nextid & ", " & session("repid") & ",2,'" & visitdate & "'," & total & ")
rssum.movenext
wend
答案 1 :(得分:2)
这里有几个问题。
1
if rssum.eof then
while not rssum.eof
考虑一下这个逻辑,你说 如果 条件存在 然后 那么只有当条件不存在时才这样做。您可能根本不需要条件语句,但如果您想要一个仅适用于非空记录集的语句,那么实现它的方法是
if not (rssum.eof and rssum.bof) then
2
set abrec = conn.execute(...)
这是一个insert命令而不是select。您没有任何输出来填充记录集,因此丢失set abrec =
您需要在插入查询周围引用
正如Ekkehard指出你需要将rssum(" total")和rssum(" visitdate")的值分配给不同的变量,不要使用rstotal两次
正如Kyle JV指出的另一个答案wend
需要在rssum.movenext之后,而不是之前。
全部放在一起,试试
set rssum = conn.execute("select sum(total) as total, visitdate from table_1 where repid=" & session("repid") & " and type=1 group by visitdate ")
if not (rssum.bof and rssum.eof) then
while not rssum.eof
total=rssum("total")
visitdate=rssum("visitdate")
conn.execute("insert into table_1 (abid,repid,type,visitdate,total) values(" & nextid & ", " & session("repid") & ",2,'" & visitdate & "'," & total & ")"
rssum.movenext
wend
rssum.close
set rssum = nothing
end if
答案 2 :(得分:1)
if rssum.eof then ' if EOF
while not rssum.eof ' while not EOF
无法工作并分配给rstotal
两次:
rstotal=rssum("total")
rstotal=rssum("visitdate")
也没有意义。