ADODB.Recordset上的“types不匹配”错误

我有一个程序,应该从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返回一个错误“types不匹配”,并强调.RecordCount For varTempInt = 1 To varRecordset.RecordCount (样本中的最后一个循环)。 我已经安装了Windows支持文章983246build议的修补程序,至less在我的理解。 我将它安装到C:目录并重新启动我的机器,但它仍然无法正常工作。

编辑1:只是想澄清,我以前使用ADO 2.5 NOT ADO 6.1

TL; DR:如何修复运行Excel 2010的64位机器上的RecordSet.RecordCount “types不匹配”错误?

我没有这个确切的问题,但我发现ADODBlogging集上的recordcount属性被击中或错过。 你最好的select是重写循环,如:

 recordset.movefirst While Not recordset.eof <your stuff with your record> recordset.movenext Loop 

另外,要testinglogging集中是否有logging,可以使用:

 If recordset.BOF and recordset.EOF THEN <Something is wrong there are no records> End If 

我的猜测是,ADODB recordcount属性可能是你使用的ODBC驱动程序的64位版本,因为它几乎是每个ODBC驱动程序。

谢谢你们的快速回复,但是,我不知何故设法使用ADO 6.1而不是ADO 2.5。 看来,使用更新版本的ActiveX数据库对象做了窍门,杜。

为了将来的参考,如果你打算升级到ADO 6.0,ConnectionString的值将是相同的,除非你必须使用User ID=<USR>; Password=<PSWD> User ID=<USR>; Password=<PSWD>而不是USR=<USR>;PWD=<PWD>

这个问题实际上是由早期的excels中的一个bug造成的。 那里有一个修补程序。 的HotFix

我在Office 16上开发了一些macros,但是在以前的版本上做UAT的时候,它失败了,简单的解决方法就是简单地将RecordCount

 rst = SomeRecordset dim rstCount as Long rstCount = CLng(rst.RecordCount)