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)