OLEDB连接没有刷新日期 [英] OLEDB Connection has no refresh date
本文介绍了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屋!
查看全文