如何同步两个MS Access表?

时间:2017-10-27 14:48:42

标签: sql ms-access

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

TempCost具有结构
ID费用类型年份1月2月3月4月5月6月7月8月9月10月11月11月
1硬件2017 $ 70 $ 80 $ 92 $ 93 $ 104 $ 90 $ 0 $ 0 $ 100 $ 75 $ 110 $ 0
2软件2017 $ 72 $ 85 $ 21 $ 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

两个表的主键不匹配,列数不同。关于该方法的任何指导都受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

您有一个链接表的复合自然键: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语句。

主要的好处是,你拥有了根据另一个表更新一个表所需的一切,每个月都会有一个单独的查询来完成它,并且可能会有一些类型转换以使其工作。