休斯顿,我们有一个问题! :)从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