我有一个程序,应该从SQL数据库读取数据并报告给Excel。在32位机器上可以正常工作,但是自从我切换到64位工作环境后,程序无法运行。这里是我的代码示例(返回的第一个错误):
Private Sub SearchBox_Change()
ResultBox.Clear
Call CompileQuery
'If the query is empty
If SearchBox.Value = "" Then
NumShowingLabel = "Showing 0 of 0 Results"
ResultBox.Clear
GoTo noSearch
End If
'Open a new query with varQuery
With varRecordset
.ActiveConnection = varConnection
.Open varQuery
End With
'Set NumShowingLabel
If varRecordset.RecordCount > varMaxResults Then
NumShowingLabel = "Showing 60 of " & varRecordset.RecordCount & " Results"
Else
NumShowingLabel = "Showing " & varRecordset.RecordCount & " of " & varRecordset.RecordCount & " Results"
End If
'As long as there is a record, move to the first one
If Not varRecordset.RecordCount = 0 Then varRecordset.MoveFirst
'Add each record to ResultBox
If varRecordset.RecordCount > varMaxResults Then
For varTempInt = 1 To varMaxResults
ResultBox.AddItem varRecordset.Fields("FileName").Value
varRecordset.MoveNext
Next
Else
For varTempInt = 1 To varRecordset.RecordCount
ResultBox.AddItem varRecordset.Fields("FileName").Value
varRecordset.MoveNext
Next
End If
'Release varRecordSet
varRecordset.Close
noSearch:
End Sub
运行时,Excel 返回一个“类型不匹配”的错误,并突出显示
For varTempInt = 1 To varRecordset.RecordCount
(样例中的最后一个 for 循环)中的.RecordCount
。我已经根据 Windows 支持文章 983246 推荐的方法安装了补丁程序,至少在我理解的范围内。我将其安装到 C: 目录并重新启动了我的机器,但仍然无法正常工作。注:我之前使用的是 ADO 2.5 而不是 ADO 6.1。
简而言之,我应该如何在运行 Excel 2010 的 64 位机器上修复
RecordSet.RecordCount
的“类型不匹配”错误?
varConnection
使用哪种类型的光标?我认为你需要使用adOpenKeyset
或者adOpenStatic
才能在 ADO 中得到准确的.RecordCount
。默认的adOpenForwardOnly
对于此目的是不足够的。 - user4039065