SQL 不会插入到 table
SQL will not insert into table
对于这个问题,我提前表示歉意——但我没有经典的经验ASP,虽然我已经尝试过,但我就是想不通。
我的任务是调整现有系统(直到找到替代品),该任务已写在 ASP/VBScript。
我面临的问题是,当我使用 SQL 检索一些数据时,我无法让脚本将结果更新到 table。每次查询 运行.
时,结果数可能会发生变化
例如; table中的数据计算某人缺席的时间,每次有人缺席时,它在一个字段中记录持续时间,在另一个字段中记录日期,在另一个字段中给记录一个value = 1
。
这部分有效。
我想做的是整理每个日期的缺席总持续时间,并将该数据插入到相同的 table 中,并带有 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 天的数据时,它 returns 2 type=2
个条目,但重复了第一个日期的日期。
为什么会这样?
if rssum.eof then ' if EOF
while not rssum.eof ' while not EOF
不可能工作并分配给 rstotal
两次:
rstotal=rssum("total")
rstotal=rssum("visitdate")
也没有意义。
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.
if rssum.eof then
while not rssum.eof
想想这个逻辑,你是说如果一个条件存在 then 只有当条件不存在时才这样做。您可能根本不需要条件语句,但是如果您想要一个只适用于非空记录集的条件语句,那么方法是
if not (rssum.eof and rssum.bof) then
2.
set abrec = conn.execute(...)
这是一个插入命令,而不是 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
对于这个问题,我提前表示歉意——但我没有经典的经验ASP,虽然我已经尝试过,但我就是想不通。
我的任务是调整现有系统(直到找到替代品),该任务已写在 ASP/VBScript。
我面临的问题是,当我使用 SQL 检索一些数据时,我无法让脚本将结果更新到 table。每次查询 运行.
时,结果数可能会发生变化例如; table中的数据计算某人缺席的时间,每次有人缺席时,它在一个字段中记录持续时间,在另一个字段中记录日期,在另一个字段中给记录一个value = 1
。
这部分有效。
我想做的是整理每个日期的缺席总持续时间,并将该数据插入到相同的 table 中,并带有 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 天的数据时,它 returns 2 type=2
个条目,但重复了第一个日期的日期。
为什么会这样?
if rssum.eof then ' if EOF
while not rssum.eof ' while not EOF
不可能工作并分配给 rstotal
两次:
rstotal=rssum("total")
rstotal=rssum("visitdate")
也没有意义。
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.
if rssum.eof then
while not rssum.eof
想想这个逻辑,你是说如果一个条件存在 then 只有当条件不存在时才这样做。您可能根本不需要条件语句,但是如果您想要一个只适用于非空记录集的条件语句,那么方法是
if not (rssum.eof and rssum.bof) then
2.
set abrec = conn.execute(...)
这是一个插入命令,而不是 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