【问题标题】:Access change query expression based on last modified date for linked table?根据链接表的最后修改日期访问更改查询表达式?
【发布时间】:2014-01-02 15:45:43
【问题描述】:
我有一个链接表,其列名“2012 Full Units w/c”在今年某个时候,数据将更新,该列将更改为“2013 Full Units w/c”。发生这种情况时,我希望查询将这些新数据拉入此列。该数据将在何时发生变化是不确定的。但是,此更新将针对该链接文件的年度第一次更新。
目前我通过引用“2012 Full Units w/c”明确查询此表。如何使用上次修改日期以适应列标题中这种不确定的时间变化的方式获取此信息?
【问题讨论】:
标签:
sql
ms-access
ms-access-2007
【解决方案1】:
您可以使用一些 VBA 代码来测试旧的字段名称是否仍然存在,如下所示:
Sub CheckForFieldNameChange()
Dim cdb As DAO.Database, rst As DAO.Recordset, errNo As Long
Set cdb = CurrentDb
cdb.TableDefs("YourLinkedTable").RefreshLink
On Error GoTo CheckForFieldNameChange_Error
Set rst = cdb.OpenRecordset( _
"SELECT TOP 1 [2012 Full Units w/c] " & _
"FROM [YourLinkedTable]", _
dbOpenSnapshot)
Debug.Print "Field name has not changed yet."
rst.Close
CheckForFieldNameChange_Exit:
Set rst = Nothing
Set cdb = Nothing
Exit Sub
CheckForFieldNameChange_Error:
errNo = Err.Number
Select Case errNo
Case 3061
Debug.Print "Field name has changed."
GoTo CheckForFieldNameChange_Exit
Case Else
Err.Raise errNo
End Select
End Sub
【解决方案2】:
如果Last Modified Date 指的是表中的一个字段,那么您可以使用类似的内容:
SELECT (SELECT Year(Max([Last Modified])) FROM TableName) & " Full Units w/c" AS FieldName
FROM TableName
但是,如果您指的是上次修改相关表格的实际日期,您可能需要一些 VBA 来促进,如下所示:
Public Function tblLastModified(tblName As String) As Date
tblLastModified = CurrentDb.TableDefs(tblName).LastUpdated
End Function
那么您的查询将是:
SELECT (SELECT Year(tblLastModified("TableName")) FROM TableName) & " Full Units w/c" AS FieldName
FROM TableName