【问题标题】:How can I synchronize two MS Access tables?如何同步两个 MS Access 表?
【发布时间】:2017-10-27 14:48:42
【问题描述】:

我有两个访问表,表TempCost 和表FinalCost

TempCost 具有结构
ID ExpenseType 年份 1 月 2 月 3 月 4 月 5 月 6 月 7 月 8 月 9 月 10 月 11 月 12 月
1硬件2017 $ 70 $ 70 $ 92 $ 93 $ 104 $ 90 $ 0 $ 0 $$ 00 $ 75 $ 110 $ 0

2 Software 2017 $ 72 $ 85 $ 21 $ 65 $ 65 $ 101 $ 0 $ 0 $ 21 $ 102 $ 77 $ 120 $ 21

FinalCost 具有结构
ID ExpenseType MonthYear  Cost
21 硬件        01/2017    70
22 硬件         02/2017    80
23 硬件        03/2017   92

简而言之,FinalCostTempCost 的更规范化版本,但是我们需要TempCost 表将其呈现给用户进行修改。我需要同步这两个表,以便如果从 Temp Cost 中删除/添加条目,则应从 FinalCost 删除/添加它,如果在 Temp Cost 中更新条目,则应在 FinalCost 中更新它/p>

两个表的主键不匹配,列数不同。非常感谢任何有关该方法的指导。

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    您有一个连接表的复合自然键:ExpenseType 和 MonthYear。当 TempCost 中的行更新时,您需要在 FinalCost 表上运行 12 次更新查询。为一年中的每个月创建一个更新查询。 UPDATE FinalCost WHERE ExpenseType 匹配 TempCost.ExpenseType、TempCost.Year + 查询的硬编码月份。假设您的 FinalCost.MonthYear 列是文本,而 TempCost.Year 列是数字,它看起来像这样:

    UPDATE FinalCost 
    INNER JOIN TempCost ON FinalCost.ExpenseType = TempCost.ExpenseType 
    SET FinalCost.Cost = TempCost.Jan
    WHERE ((FinalCost.MonthYear= "01/"+ CStr(TempCost.Year)));
    

    有几种方法可以实现这一点。您可以在退出 TempCost 表单中的每个文本框时执行适当的月份查询。更新 TempCost 记录时执行所有 12 个查询。编写一些 VBA 代码以在退出文本框时动态构造和执行相应月份的 SQL 语句,或者使用循环一次动态地创建和执行所有 12 个月的 SQL 语句。

    主要收获是您拥有根据另一个表更新一个表所需的一切,并且每个月都需要一个单独的查询来执行此操作,并且可能会在此过程中进行一些类型转换以使其工作。

    【讨论】:

    • 谢谢约翰,我会尝试这种方法并在完成后更新这里的代码。
    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多