我正在使用来自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,这种脚本以前曾多次使用过。
如何更改代码以使我的脚本按正确的顺序处理所有行
注意:某些对象在另一个模块中声明。
更新: 如果我将循环更改为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
答案 0 :(得分:0)
我没有足够的代表只是写一个评论,但如果这是一个预定的代理,当你对代码进行更改并保存它时它会立即运行 - 它也会按计划启动,所以因为这个可能会跑两次。希望有所帮助。
答案 1 :(得分:0)
我终于解决了它,循环ADODB没有问题,问题是Domino Administrator中的控制台报告循环,因为它以错误的顺序处理。一旦我在“Domino控制台”中检查了循环,它就会报告正确的顺序。
不信任您在Domino Administrator控制台中看到的输出。