防止价格自动更新

时间:2018-02-22 14:59:38

标签: ms-access

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

例如:

零件表有NAME,PRICE

2月21日,我创建了发票1,在那段时间内,1080 TI的价格为500美元

比2月28日价格变为650美元,同样我创建发票。

但问题是,当我更新零件表中的价格(发票2)时,发票1的价格也会从500 $变为650 $,我想阻止这种情况。

谁能告诉我怎么样?

2 个答案:

答案 0 :(得分:1)

仅在创建发票时阅读价格。

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

或者,保存价格变更及其有效日期。然后,在提取发票价格时,查看最新日期早于或等于交货日期或发票日期的价格。

答案 1 :(得分:0)

此解决方案使用三个表。

零件

  • PartID =自动编号
  • PartName =文字
    主键 = PartID

示例

+----------+--------+
| PartName | PartID |
+----------+--------+
| MyPart   |      1 |
+----------+--------+

价格

  • PartID = Number(外键)
  • 价格=货币
  • StartDate =日期/时间
    主键 =(PartID,StartDate)

示例

+--------+---------+------------+
| PartID |  Price  | StartDate  |
+--------+---------+------------+
|      1 | £500.00 | 01/06/2017 |
|      1 | £650.00 | 01/02/2018 |
+--------+---------+------------+

发票

  • InvoiceID = Number
  • PartID = Number(外键)
  • InvoiceDate =日期/时间
    主键 =(InvoiceID,PartID,InvoiceDate)

示例

+-----------+--------+-------------+
| InvoiceID | PartID | InvoiceDate |
+-----------+--------+-------------+
|         1 |      1 | 02/06/2017  |
|         2 |      1 | 01/03/2018  |
+-----------+--------+-------------+

此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
                    )

示例

+-----------+-------------+----------+---------+
| InvoiceID | InvoiceDate | PartName |  Price  |
+-----------+-------------+----------+---------+
|         1 | 02/06/2017  | MyPart   | £500.00 |
|         2 | 01/03/2018  | MyPart   | £650.00 |
+-----------+-------------+----------+---------+

来源,因为我忘记了来龙去脉.... how-do-i-efficiently-get-the-most-recent-corresponding-row