【发布时间】:2015-04-28 00:53:45
【问题描述】:
我有一个程序应该从 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 返回错误“类型不匹配”并突出显示 .RecordCount 的 For varTempInt = 1 To varRecordset.RecordCount(示例中的最后一个 for 循环)。我已经安装了 Windows 支持文章 983246 推荐的修补程序,至少据我所知。我把它安装到了C:目录,然后重启了我的机器,但是还是不行。
编辑 1:只是想澄清一下我之前使用的是 ADO 2.5 而不是 ADO 6.1
TL;DR:如何在运行 Excel 2010 的 64 位计算机上修复 RecordSet.RecordCount“类型不匹配”错误?
【问题讨论】:
-
您的
varConnection使用什么类型的光标?我相信您需要adOpenKeyset或adOpenStatic才能通过ADO 获得准确的.RecordCount。默认的adOpenForwardOnly不足以实现此目的。 -
@Jeeped 我一直在使用 adUseClient (3)。我在互联网的某个地方看到过,但如果 adOpenKeyset 或 adOpenStatic 会更好,我愿意尝试。