【问题标题】:Capturing tables changes捕获表更改
【发布时间】:2013-12-24 03:11:08
【问题描述】:

我有一个在 access 中定期更新的表。

@编辑:

这个表格非常简单,由 2 个列组成。我将用 2 个标识符表示它们:列名称和列等级。一个名字可能有 N 个等级。

/@编辑

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

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

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

谁能给我一些想法,我可以轻松实施以解决我的问题?

【问题讨论】:

  • “新增内容”是否包括对现有记录的编辑?换句话说,是否存在三个类别(新、已删除、已更改)?
  • 我建议您搜索microsoft access audit table。结果将侧重于审核通过表单进行的一次性编辑,但将适用。
  • 不,只有 Deleted 和 New 值!这张表只有 2 列(其中一列是 PK,和往常一样),所以我们不能“更改”一行...(删除一行而不像那样附加新的一行意味着它已被删除, 并附加一个不在先前更新中的新行意味着它是新的) (:
  • 解决方案可能取决于您对审计表的使用。您需要累积历史记录,还是只需要最近的历史记录?
  • 自从乞讨以来我不是很清楚。现在更清楚了,我想。看看我的编辑。有一个字段可以唯一地标识它。字段名称。

标签: ms-access ms-access-2010


【解决方案1】:

如果表和文本文件都包含具有唯一值的列(例如主键),您可以使用该列来标识匹配的行,您可以在该列上使用 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 重复所有操作,以确定TableA 中不存在哪些TableB 行。

【讨论】:

  • 感谢您的回复,汉斯!我会试试这个,然后回到这里。无论如何,要从 TableB 中获取不在 tableA 中的记录,我会执行以下操作? SELECT b.id FROM TableB AS b LEFT JOIN TableA AS a ON b.id = a.id WHERE a.id Is Null;
  • 伙计们,它可以工作...但是现在我注意到当更改太多时,选择返回NOTHING!正常吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 2012-02-25
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
相关资源
最近更新 更多