OLEDB连接没有刷新日期 [英] OLEDB Connection has no refresh date

查看:0
本文介绍了OLEDB连接没有刷新日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要以编程方式检查Excel中到SQL表和视图的多个OLEDB数据连接的刷新日期。它们都以相同的方式配置并使用相同的连接字符串,我使用以下命令在VBA中检查它们:

Connections.OLEDBConnection.RefreshDate
但是,这些连接中有一小部分没有刷新日期,我并不是说刷新日期属性返回空值,该属性甚至不存在。VBA抛出"应用程序定义或对象定义的错误",当我检查连接属性时,"上次刷新"字段为空:

无论我如何构建连接或刷新多少次,到这些特定SQL表和视图的连接都是一致的。我坚持使用OLEDB,我们的一些机器与Power Query存在兼容性问题。有谁知道是什么原因导致这种情况,或者我需要在Excel或SQL中更改哪些内容?

推荐答案

如果refreshDate没有填写,可能是您运气不好。

作为一种解决办法,您可以自己跟踪刷新。起始点是表的afterRefresh-事件。为此,您必须将以下代码添加到Workbook-模块(将不适用于常规模块,因为With Events需要class

Option Explicit
Private WithEvents table As Excel.QueryTable

Private Sub table_AfterRefresh(ByVal Success As Boolean)
    Debug.Print table.WorkbookConnection.name & " refreshed. (success: " & Success & ")"
    If Success Then
        Call trackRefreshDate(table.WorkbookConnection.name, Now)
    End If
End Sub

现在您只需要一个逻辑来保存刷新事件。在我的示例中,我将其保存为工作簿级别的名称,当然您也可以将其保存在(隐藏的)工作表中。将此内容放入常规模块:

Sub trackRefreshDate(tableName As String)

    Dim nameObj As Name, nName As String
    Set nameObj = Nothing
    nName = "Refresh_" & tableName
    On Error Resume Next
    ' Check if name already exists
    Set nameObj = ThisWorkbook.Names(nName)
    On Error GoTo 0
    Dim v
    v = Format(Now, "dd.mm.yyyy hh:MM:ss")
    If nameObj Is Nothing Then
        ' No: Create new
        Call ThisWorkbook.Names.Add(nName, v)
    Else
        nameObj.Value = v
    End If
End Sub

Function getRefreshDate(tableName As String)
    Dim nName As String
    nName = "Refresh_" & tableName
    On Error Resume Next
    getRefreshDate = Replace(Mid(ThisWorkbook.Names(nName), 2), """", "")
    On Error GoTo 0        
End Function

这篇关于OLEDB连接没有刷新日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆