2009-11-13 71 views
0

以下代码有效。连接打开正常,但recordset.recordCount始终在表中有数据时返回-1。如果我尝试调用记录集上的任何方法/属性,它会崩溃Excel。有任何想法吗?? 感谢使用Excel从Excel连接到Oracle 10g VBA

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 

回答

1

如果你想总记录工作,特别是在没有获取的记录,你需要使用adUseClientadUseServer

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

0

看来Excel崩溃了,因为它无法处理一些Oracle数据类型。 select *正在返回TIMESTAMP类型的列(3)WITH TIME ZONE。 这会导致Excel在我尝试从记录集读取时立即崩溃。