Ms access 防止价格自动更新

Ms access 防止价格自动更新,ms-access,Ms Access,我想问一下如何防止价格自动更新 例如: 零件表中有名称、价格 2月21日,我创建了发票1,当时1080 TI的价格是500$ 比2月28日价格改为650美元,和我创建的发票相同 但问题是,当我更新零件表(发票2)中的价格时,发票1的价格也从500美元更改为650美元,我想防止这种情况发生 有人能告诉我怎么做吗?创建发票时只需阅读价格 创建发票时,将单价保存在发票行表中 或者,将价格更改保存为有效日期。然后,在提取发票价格时,查找最新日期早于或等于交货日期或发票日期的价格。此解决方案使用三个表 零

我想问一下如何防止价格自动更新

例如:

零件表中有名称、价格

2月21日,我创建了发票1,当时1080 TI的价格是500$

比2月28日价格改为650美元,和我创建的发票相同

但问题是,当我更新零件表(发票2)中的价格时,发票1的价格也从500美元更改为650美元,我想防止这种情况发生


有人能告诉我怎么做吗?

创建发票时只需阅读价格

创建发票时,将单价保存在发票行表中


或者,将价格更改保存为有效日期。然后,在提取发票价格时,查找最新日期早于或等于交货日期或发票日期的价格。

此解决方案使用三个表

零件

  • PartID=自动编号
  • PartName=文本
    主键=PartID
范例

价格

  • PartID=编号(外键)
  • 价格=货币
  • 开始日期=日期/时间
    主键=(PartID,StartDate)
范例

发票

  • 发票ID=编号
  • PartID=编号(外键)
  • 发票日期=日期/时间
    主键=(发票ID、PartID、发票日期)
范例

然后,此SQL将收回发票日期的相关价格:

SELECT InvoiceID
       , InvoiceDate
       , PartName
       , Price
FROM   (Invoices Inv LEFT JOIN Parts ON Inv.PartID = Parts.PartID)
                     LEFT JOIN Prices P1 ON Inv.PartID = P1.PartID AND
                                            Inv.InvoiceDate>=P1.StartDate
WHERE   NOT EXISTS (
            SELECT 1
            FROM    Prices P2
            WHERE   P2.PartID = P1.PartID AND
                    P2.StartDate<=Inv.InvoiceDate AND
                    P2.StartDate>P1.StartDate
                    )
源代码,因为我忘记了详细信息….

谢谢您的帮助!谢谢你的帮助!
+--------+---------+------------+
| PartID |  Price  | StartDate  |
+--------+---------+------------+
|      1 | £500.00 | 01/06/2017 |
|      1 | £650.00 | 01/02/2018 |
+--------+---------+------------+
+-----------+--------+-------------+
| InvoiceID | PartID | InvoiceDate |
+-----------+--------+-------------+
|         1 |      1 | 02/06/2017  |
|         2 |      1 | 01/03/2018  |
+-----------+--------+-------------+
SELECT InvoiceID
       , InvoiceDate
       , PartName
       , Price
FROM   (Invoices Inv LEFT JOIN Parts ON Inv.PartID = Parts.PartID)
                     LEFT JOIN Prices P1 ON Inv.PartID = P1.PartID AND
                                            Inv.InvoiceDate>=P1.StartDate
WHERE   NOT EXISTS (
            SELECT 1
            FROM    Prices P2
            WHERE   P2.PartID = P1.PartID AND
                    P2.StartDate<=Inv.InvoiceDate AND
                    P2.StartDate>P1.StartDate
                    )
+-----------+-------------+----------+---------+
| InvoiceID | InvoiceDate | PartName |  Price  |
+-----------+-------------+----------+---------+
|         1 | 02/06/2017  | MyPart   | £500.00 |
|         2 | 01/03/2018  | MyPart   | £650.00 |
+-----------+-------------+----------+---------+