sql - 使用 VBA 运行多个 SQL 查询 (Oracle) - 为什么这么慢?

标签 sql oracle vba excel

我编写了一个简单的 VBA 代码来运行多个 SQL 查询。结果应该会写入 Excel 表格。问题是这个过程需要很长时间才能完成!事实上,逐一运行这些查询会快得多。谁能告诉我如何让它运行得更快?

这是我的代码:

Const strCon As String = "Driver={Microsoft ODBC for Oracle}; " & _
"CONNECTSTRING=(DESCRIPTION=" & _
"(ADDRESS=(PROTOCOL=TCP)" & _
"(HOST=xxxx)(PORT=xxx))" & _
"(CONNECT_DATA=(SID=RTD))); uid=xxxx; pwd=xxxx;"

Sub RunScripts()

Dim r As Integer
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim q1 As String
Dim q2 As String
Dim q3 As String

Set con = New ADODB.Connection
Set rs = New ADODB.Recordset

q1 = Worksheets("Data").Range("i28").Value
Set rs = con.Execute(q1)
Worksheets("ACCV Query").Range("A2").CopyFromRecordset rs

Set rs = Nothing
r = Worksheets("ACCV Query").Range("A65536").End(xlUp).Row

'Next SQL Query
q2 = Worksheets("Data").Range("j28").Value
Set rs = con.Execute(q2)
Worksheets("ACCV Query").Range("A" & r).CopyFromRecordset rs

Set rs = Nothing
r = Worksheets("ACCV Query").Range("A65536").End(xlUp).Row

'Next SQL Query
q3 = Worksheets("Data").Range("k28").Value
Set rs = con.Execute(q3)
Worksheets("ACCV Query").Range("A" & r).CopyFromRecordset rs

con.Close
Set con = Nothing
Set rs = Nothing

End Sub

SQL 查询存储在单元格中并命名为 q1、q2 等(它们都有效)。

当我运行两个这样的查询时,它工作得很好,但是一旦我启动了 15 个......宏就永远不会完成工作。每个 SQL 脚本需要几秒钟的时间来运行,因此它应该可以快速运行。

如何才能让它运行得更快? 请帮忙!

非常感谢! 米。

最佳答案

通常,导致 Excel 速度变慢的原因是不断的屏幕更新和重新计算。每当您更改单元格的内容时,它都会重新计算并刷新屏幕。对于大型插入,这确实会减慢操作速度。幸运的是您可以将其关闭。

在函数的顶部,放置:

Application.Calculation = xlManual
Application.ScreenUpdating = False

然后在函数末尾(以及任何错误处理中),输入:

Application.Calculation = xlAutomatic
Application.ScreenUpdating = True

关于sql - 使用 VBA 运行多个 SQL 查询 (Oracle) - 为什么这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12803795/

相关文章:

sql - “some”函数是通用SQL的一部分吗?

sql - 总和减去最小值的平均值

excel - 透视全文而不是计数 - Excel

php - Laravel/SQL 按流行度/趋势排序

sql - Big Query Tables 中列的默认值

java - 想要一个 SQL 查询来了解当前 JDBC 连接命中的 Oracle RAC 节点

mysql - Java Spring应用程序中从Oracle迁移到MySQL : Connection Pooling

vba - Excel VBA 中的 Like 运算符

excel - 我可以在 Watches 窗口中告诉对象具有哪些属性吗?

SQL:从日期和时间将 UTC 时间戳列添加到表中