休斯頓,我們有一個問題! :)從Oracle 11g檢索數據到Excel 2007 - Excel沒有響應
我通過VBA連接到使用OraOLEDB司機一個Oracle 11g數據庫的一些Excel文件:當我運行像SELECT * FROM <view_name_here>
一個SQL查詢
strConn = "User ID=<useridhere>" & _
";Password=<passwordhere>" & _
";Data Source=" & xServer & _
";Provider=OraOLEDB.Oracle"
的問題發生。當用戶單擊一個按鈕時會運行這些查詢 - 該按鈕附有一個宏。
我用做查詢什麼:
Sub Load_Data(ws As Worksheet, sSql As String)
Dim oQt As QueryTable
OpenConn
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open sSql, sConn
ws.Activate
ClearActiveSheet
Set oQt = ActiveSheet.QueryTables.Add(rs, ws.Cells(1, 1))
oQt.Refresh
rs.Close
sConn.Close
End Sub
注:ws
是將顯示數據的工作表,sSql
是檢索數據的查詢。
我的問題是,Excel凍結 - 沒有響應 - 從Oracle數據庫檢索數據 - 如果我有10個Excel實例打開,所有將無法使用。
我的目標是有一個「非阻塞」數據庫訪問 - 如果查詢需要10分鐘,我仍然可以使用excel。
如果有人能幫助我,那將是巨大的:)
注:我已經連接,我認爲需要的所有部分的代碼。如果你想看到任何可能導致解決方案的東西,請告訴我。
感謝
編輯:我設法得到它與下面的代碼工作:
Conn.Open "PROVIDER=MSDAORA.Oracle;DATA SOURCE=" & Server & ";" & "USER ID=" & UID & ";PASSWORD=" & PWD
Cmd.ActiveConnection = Conn
Cmd.CommandType = adCmdText
Cmd.CommandText = sSql
Set RS = Cmd.Execute
For X = 0 To noLines
Data.Cells(1, X + 1) = RS.Fields(X).Name
Next
Do While Not RS.EOF
Row = Row + 1
For Findex = 0 To RS.Fields.Count - 1
Data.Cells(Row + 1, Findex + 1) = RS.Fields(Findex).Value
Next Findex
RS.MoveNext
Loop
Application.Calculation = xlCalculationAutomatic
Application.Calculate
Conn.Close
這確實塊當前文件,但沒有其餘的。這是主要目標。
感謝您的回覆。我會看看它,試一試,並會報告結果。 – hardc0ded
我已經嘗試了您的解決方案,但無法使其正常工作。我已經編輯了我的問題,以便提供我的「是的這是一種解決方案,這種工作」:) – hardc0ded
@ hardc0ded好吧,如果你確實想要嘗試讓「adAsyncExecute」方法工作,請問它作爲一個新問題,發佈一些代碼,以及我自己或另一個SO用戶應該能夠讓你走上正確的軌道。 – Blackhawk