SQL不会插入表中

时间:2015-09-19 12:15:25

标签: mysql sql-server-2008 vbscript asp-classic

我提前为这个问题道歉 - 但我没有经典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条目,但会复制第一个日期的日期。

为什么会这样?

3 个答案:

答案 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 =

  1. 您需要在插入查询周围引用

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

  3. 正如Kyle JV指出的另一个答案wend需要在rssum.movenext之后,而不是之前。

  4. 全部放在一起,试试

    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")

也没有意义。