我知道有很多问题,大多数人都说设置光标位置可以修复它(resultSet.CursorLocation = adUseClient
)。这仍然返回-1。
然后我发现了一条帖子,说要尝试RecordSet.MoveLast
,然后在循环之前再次获取RecordCount
,然后再获取MoveFirst
。这仍然导致-1。我还注意到我的连接与我在这个问题上发现的大多数连接有点不同。这是:
sDSN = "DSN=" & sDSN & ";UID=" & sUsername & ";PWD=" & sPassword & ";"
Set sConnect = CreateObject("ADODB.Connection")
sConnect.Open sDSN
sSQL = <big statement>
Set resultSet = sConnect.Execute(sSQL)
resultSet.CursorLocation = adUseClient
resultSet.MoveLast
WScript.Echo resultSet.RecordCount & " records found." 'Outputs -1
resultSet.MoveFirst
Do While Not resultSet.eof
'do lots of stuff here
Loop
答案 0 :(得分:2)
尝试使用Recordset.Open()
并提供记录集参数,而不是创建一个快速但有限的“firehose”光标(从Connection.Execute()
返回的类型)。
Const adOpenStatic = 3
Const adLockReadOnly = 1
Set resultSet = CreateObject("ADODB.Recordset")
resultSet.Open sSQL, sConnect, adOpenStatic, adLockReadOnly
WScript.Echo resultSet.RecordCount