来自Lotusscript的循环ADODB记录集未完成或以随机顺序返回行

时间:2015-11-09 12:51:19

标签: sql-server vba lotus-domino adodb lotusscript

我正在使用来自Lotusscript的ADODB在IBM Domino中的预定代理中运行SQL存储过程,并得到非常奇怪的结果。

这是我运行的脚本

Sub test

    On Error GoTo e 
    Dim sqluser As String,sqlpw As String
    Dim srv As String, database As String, username As String, pw As String, sqlquery As String
    Dim tmp As String,t As Long

    sqlsrv = "..."
    sqldb = "..."
    sqluser = "..."
    sqlpw = "..."

    strConn = |Provider=SQLOLEDB.1;Server=| + sqlsrv + |;Database=| + sqldb + |;UID=| + sqluser + |;PWD=| + sqlpw
    Set adoConn = CreateObject("ADODB.Connection")
    Call adoConn.Open(strConn)
    Set rs = createobject("ADODB.Recordset")
    tmp = |Select ArtGr,KA,Sum(Belopp) Belopp, Sum(Kvantitet) Kvantitet From CrmStatTmp Where Len(KA)>0 Group By ArtGr,KA Order By KA,ArtGr|
    rs.open tmp,adoConn
    rs.MoveFirst
    Do Until rs.eof
        Print "Processing " + CStr(t)
        t = t + 1
        rs.movenext
    Loop

    Set rs = Nothing
    adoConn.close
    Set adoConn = Nothing
    Print "Ready"
    Exit sub
e:

    Print "Error"
    Print Error,Erl
    Set rs = Nothing
    adoConn.close
    Set adoConn = Nothing


End Sub

似乎没有任何错误,脚本似乎在大约345之后停止执行,(数字可以不同,我更改了SQL查询)。

我不相信SQL查询有任何问题,因为当我们在其他工具中尝试它时,它工作正常。

下图显示计数器如何计数到344,然后突然从326开始计数。此脚本似乎没有完成作为最后一行" Ready"永远不会打印出来,并且似乎没有错误,因为错误处理程序中的print语句永远不会打印出来。

我试图限制从SQL查询返回的行数,但这没有多大帮助,有一点我将其设置为仅返回前20条记录,然后计数器达到15并且似乎运行整个脚本再次。所以输出为0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2 ...

我在Lotusscript中多次使用过ADODB,这种脚本以前曾多次使用过。

enter image description here

如何更改代码以使我的脚本按正确的顺序处理所有行

注意:某些对象在另一个模块中声明。

更新: 如果我将循环更改为this会更加奇怪,因为这次脚本运行到最后,但数字仍然没有按顺序排列

Do While Not rs.eof
        Print "Processing=" + CStr(t) + "/Value=" + CStr(rs.fields("ArtGr").value) + "/Status=" + CStr(rs.status) 
        t = t + 1
        rs.movenext
    Loop

enter image description here

2 个答案:

答案 0 :(得分:0)

我没有足够的代表只是写一个评论,但如果这是一个预定的代理,当你对代码进行更改并保存它时它会立即运行 - 它也会按计划启动,所以因为这个可能会跑两次。希望有所帮助。

答案 1 :(得分:0)

我终于解决了它,循环ADODB没有问题,问题是Domino Administrator中的控制台报告循环,因为它以错误的顺序处理。一旦我在“Domino控制台”中检查了循环,它就会报告正确的顺序。

不信任您在Domino Administrator控制台中看到的输出。

相关问题