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 =

  1. 您的插入查询需要引号

  2. 正如 Ekkehard 指出的那样,您需要将 rssum("total") 和 rssum("visitdate") 的值分配给分隔变量,不要两次使用 rstotal

  3. 正如 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