刷新每个查询所用的 Excel ODBC 数据连接查询时间

Posted

技术标签:

【中文标题】刷新每个查询所用的 Excel ODBC 数据连接查询时间【英文标题】:Excel ODBC Data Connection Query time taken to refresh each query 【发布时间】:2017-03-23 09:53:03 【问题描述】:

我正在尝试测试从 Excel 数据连接运行的查询的三种变体。

我有三个单独的数据连接和三个单独的选项卡,分别从每个连接获取数据。

每个查询的连接字符串都相同,只有命令文本(Oracle SQL)不同。

在 Excel 中是否可以查看每个查询的执行时间?

我是专门用Excel 2016 MSO 16.0.4456.1003 64bit版本的

【问题讨论】:

【参考方案1】:

可能是这样的(假设所有连接都将其结果放在工作表中,而不是在数据透视表中):

Sub TimeQueries()
    Dim oSh As Worksheet
    Dim oCn As WorkbookConnection
    Dim dTime As Double
    For Each oCn In ThisWorkbook.Connections
        dTime = Timer
        oCn.Ranges(1).ListObject.QueryTable.Refresh False
        Debug.Print Timer - dTime, oCn.Name, oCn.Ranges(1).Address(external:=True)
    Next
End Sub

要运行这个:

    Alt+F11 进入 VBA 编辑器。 从菜单:插入模块。 在窗口中粘贴代码。 关闭 VBA 编辑器。 Alt+F8 调出宏列表。选择新的并单击运行。 Alt+F11 再次进入 VBA 编辑器。 Ctrl+G 打开带有结果的即时窗格。

如果您希望代码写入单元格,请使用此版本:

Sub TimeQueries()
    Dim oSh As Worksheet
    Dim oCn As WorkbookConnection
    Dim dTime As Double
    Dim lRow As Long
    Set oSh = Worksheets("Sheet4") 'Change to your sheet name!
    oSh.Cells(1,1).Value = "Name of Connection"
    oSh.Cells(1,2).Value = "Location"
    oSh.Cells(1,1).Value = "Refresh time (s)"
    For Each oCn In ThisWorkbook.Connections
        lRow = lRow + 1
        dTime = Timer
        oCn.Ranges(1).ListObject.QueryTable.Refresh False
        oSh.Cells(lRow,3).Value = Timer - dTime
        oSh.Cells(lRow,1).Value = oCn.Name
        oSh.Cells(lRow,2).Value = oCn.Ranges(1).Address(external:=True)
    Next
End Sub

【讨论】:

它们都放在工作表中,我可以将其添加为按钮,我怎样才能让它输出结果? 1. Alt+F11 转到 VBA 编辑器。 2. 从菜单:插入模块。 3. 在窗口中粘贴代码。 4. 关闭 VBA 编辑器。 5. Alt+F8 调出宏列表。选择新的并单击运行。 6. Alt+F11 再次进入 VBE。 7. Control+G 打开带有结果的即时窗格。 8. 要保留宏吗?将文件另存为 xlsm 文件。 实际上,不太好用,它给了我一个不到一秒的输出,我认为它计算的是开始查询的时间,而不是查询完成执行的时间。 更新后的工作。很抱歉在此浪费您的时间。 有什么办法可以将其写入单元格而不是直接窗口?

以上是关于刷新每个查询所用的 Excel ODBC 数据连接查询时间的主要内容,如果未能解决你的问题,请参考以下文章

将 Excel 连接导出到 Access - .ODC 信息到 .ODBC

Excel ODBC - SQL 查询

ODBC数据源连接不上SQL SERVER 2000

通过 *** 与 SQL Server 2008 的 ODBC 连接失败

通过ODBC将Excel连接到PostgreSQL

使用 ODBC 链接到 MySql 时,MS Access 表单不刷新