以下代码有效。连接打开正常,但当表中有数据时,recordset.recordCount始终返回-1。如果我尝试调用记录集上的任何方法/属性,它会崩溃Excel。有任何想法吗?? 感谢
Sub GetData()
Dim conn As New ADODB.connection
Dim connString
connString = "DSN=name;Uid=user;Pwd=pass"
Dim rsRecords As New ADODB.recordSet
conn.Open connString
rsRecords.CursorLocation = adUseServer
rsRecords.Open "select * from xxx", conn, adOpenForwardOnly, adLockReadOnly
If conn.State = adStateOpen Then
MsgBox rsRecords.RecordCount
Else
MsgBox "no connection"
End If
rsRecords.Close
Set rsRecords = Nothing
conn.Close
Set conn = Nothing
End Sub
答案 0 :(得分:1)
如果您希望Recordcount正常工作,尤其是在不提取记录的情况下,您需要使用adUseClient
而不是adUseServer
如果这是一个大型操作并且你经常这样做,你应该选择count()而不是让数据库为你做计数。使用adUseClient
无论你喜不喜欢,ADO都会默默地将所有记录提取到应用程序的内存中。
答案 1 :(得分:0)
似乎Excel崩溃了,因为它无法处理某些Oracle数据类型。 select *返回TIMESTAMP(3)类型的时间区域列。 一旦我尝试从记录集中读取,这将导致Excel崩溃。