2009-11-13 68 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在我嘗試從記錄集讀取時立即崩潰。