1

背景信息:
我获得了 ms access 2010 数据库,其中包含 >10 个(并且不断增长的)链接表,来源:来自需要组合和查询的分散工具的 csv 和 xls。源是“脏的”,我使用带有附加代码的插入查询来清理它们并将记录存储在本地表中,并带有索引,以便以后获得更好的性能。首先使用删除查询清空本地表。插入查询使用数据宏记录After Insert: LogEvent在 USysApplicationLog 中的本地表上。数据宏在 USysApplicationLog 中产生大量记录,而每次插入每个表 1 条就足以满足我的需求。未解决的问题,但目前不太重要。

本地表与带有后缀“-local”的链接表同名。
示例:csvMachines / cvsMachines-local、csvCustomers / csvCustomers-local 等。

目前我正在手动检查所有内容,执行所有查询等。但正在寻找一种方法来进一步自动化。

在将数据库与本地表一起使用之前,我想检查是否:

  • 本地表是最新的
    ,这有点涉及查询 USysApplicationLog 和 UDF 函数以检查源的修改日期
  • 本地表格已填满
    我在这里提出问题的原因

寻找一种智能方式(sql、vba 或 udf)来组合以下工作查询

SELECT MSysObjects.NAME AS LinkedTableName
    ,[LinkedTableName] & "-local" AS LocalTableName
FROM MSysObjects
WHERE (((MSysObjects.DATABASE) IS NOT NULL));

具有简单的SELECT count(*)每个本地表名称。

尝试以下但 Access 找不到 LocalTableName 作为表。

SELECT MSysObjects.NAME AS LinkedTableName
    ,[LinkedTableName] & "-local" AS LocalTableName
    ,(
        SELECT count(*)
        FROM [LocalTableName]
        ) AS LocalTableRecordCount
FROM MSysObjects
WHERE (((MSysObjects.DATABASE) IS NOT NULL));

查看了与创建表类似的旧问题- 表的动态名称和MS Access query with dynamic from statements,但没有看到如何在我的情况下实施他们的解决方案。

4

2 回答 2

2

Access 不允许您FROM在运行时为数据源提供名称。它只是不支持该功能。

由于您在这个问题上有一个 VBA 标记,也许您会考虑一个循环遍历表名并检索每个表名的记录数的过程。

对于每个表名...

strSelect = "SELECT Count(*) FROM " & LocalTableName
MsgBox CurrentDb.OpenRecordset(strSelect)(0)

或者看看TableDef.RecordCount物业...

MsgBox CurrentDb.TableDefs(LocalTableName).RecordCount
于 2013-10-10T16:15:52.967 回答
1

寻找另一个问题的解决方案,我在Access Help中找到了这个问题的替代答案:expression.DCount(Expr, Domain, Criteria)

我的情况的工作查询:

SELECT MSysObjects.NAME AS LinkedTableName
    ,[LinkedTableName] & "-local" AS LocalTableName
    ,DCount("*", [LinkedTableName] & "-local") AS LocalTableRecordCount
FROM MSysObjects
WHERE (((MSysObjects.DATABASE) IS NOT NULL));
于 2013-10-11T08:32:41.037 回答