从Excel VBA使用ODBC连接到Oracle 10g

时间:2009-11-13 05:17:55

标签: oracle excel vba odbc

以下代码有效。连接打开正常,但当表中有数据时,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

2 个答案:

答案 0 :(得分:1)

如果您希望Recordcount正常工作,尤其是在不提取记录的情况下,您需要使用adUseClient而不是adUseServer

如果这是一个大型操作并且你经常这样做,你应该选择count()而不是让数据库为你做计数。使用adUseClient无论你喜不喜欢,ADO都会默默地将所有记录提取到应用程序的内存中。

答案 1 :(得分:0)

似乎Excel崩溃了,因为它无法处理某些Oracle数据类型。 select *返回TIMESTAMP(3)类型的时间区域列。 一旦我尝试从记录集中读取,这将导致Excel崩溃。