捕获表更改

时间:2013-12-23 18:20:21

标签: ms-access ms-access-2010

我有一张在访问时定期更新的表。

@EDIT:

此表非常简单,由2个Collumns组成。我将用2个标识符代表他们:Collumn NAME和collumn GRADE。一个NAME可能有N个GRADE。

/ @ EDIT

此表是永久性的,每天都会执行2次操作:对所有列和一个APPEND进行删除,从一个来自.txt的链接表(每天更新)完成。

我需要找到一种方法来创建一个表,该表具有此APPEND操作之前和之后表的差异。类似于具有新内容的表(上次更新中不存在的值)以及包含已删除内容且不在此新UPDATE中的表。

我设法在使用SQL Server的M $'开发人员的网络数据库中找到了一个解决方案(跟踪数据更改似乎是SQL Server中的一个功能),但由于我是Access的新手,我希望少一些复杂。

有人可以通过我可以轻松解决问题的解决方案向我提出想法吗?

1 个答案:

答案 0 :(得分:2)

如果表和文本文件都包含可用于标识匹配行的唯一值的列(例如主键),则可以在该列上使用LEFT JOIN并请求行其中“右侧”列值为Null。结果集将包括“左侧”行,“右侧”表中没有匹配的行。

Access具有无与伦比的查询向导,您可能会发现它很有用。但是这是一个简单的示例,它向我显示TableA.id中不存在的TableB值。

SELECT a.id
FROM
    TableA AS a
    LEFT JOIN TableB AS b
    ON a.id = b.id
WHERE b.id Is Null;

在您的情况下,TableB可以是文本文件的链接。并且在丢弃TableA中的行之前运行查询。

如果您必须使用多个列来标识匹配项,那么这也是可能的,只需要更改联接的ON子句。

如果要将查询的结果集存储在历史记录表中,可以将其调整为“追加查询”(INSERT INTO tblHistory (<field list>) SELECT ....)。

使用“左侧”的TableB和“右侧”的TableA重复所有内容,以确定TableB中不存在TableA行。