在表单字段更新后更新相关表中的字段

时间:2013-08-02 18:47:03

标签: ms-access ms-access-2007 access-vba

在我的数据库中,我有两个与之相关的表。第一个表是Offer Information表(OfferList)。第二个表是或多或少的报价进度(Ledger)。 OfferID在分类帐条目中引用。但是,由于Ledger中有相同商品的多个条目,因此我有一个引用特定条目的EntryID。两种形式都有一个名为status的字段。每个Ledger.Entry的状态不会更改,但商品的状态会根据最后一个条目而更改。我需要Access才能根据我目前在我的表单中使用的Ledger.Entry自动更新OfferID.Status。 I.E.我使用具有HLID,日期,状态,注释的Ledger.Entry表单。完成Ledger.Entry并保存/更新Ledger表后,我希望Offer.ID.Status更新为我在Ledger表单上放入Ledger.Entry.Status的内容。问题是我只想更新我目前正在使用的优惠中的记录。我怀疑我将使用VBA来实现我的目标。 HL#链接到HLID。

E.G。

OfferList

HL#     Status    Agent    Buyer
ID01    Presented Jim W.   Roger R.
ID02    Failed    Jim W.   Wilma S.
ID03    Accepted  Jeff H.  Roger R.
ID04    Accepted  Andy K.  Peter P.

分类帐

EntryID  HLID  Date      Status
01       ID03  04/05/13  Presented
02       ID03  04/07/13  Accepted
03       ID02  04/04/13  Presented
04       ID02  04/04/13  Failed
05       ID03  05/05/13  Closed

当我将最后一行输入Ledger时,我希望ID03的OfferList中的状态更新为已关闭。

1 个答案:

答案 0 :(得分:2)

我非常同意Andy的声明,“状态不应该在优惠表中重复,只需在必要时通过根据日期字段读取分类帐表中的最新状态来确定。”

这是我Ledger表的版本。除了lDate字段中的日期之外,我还存储了一天中的时间。表格设计包含HLIDlDate组合的唯一索引。这样就可以确定哪一行是HLID = ID02的最新行。

EntryID HLID lDate               Status
      1 ID03 4/5/2013 9:00:00 AM Presented
      2 ID03 4/7/2013 9:00:00 AM Accepted
      3 ID02 4/4/2013 9:00:00 AM Presented
      4 ID02 4/4/2013 3:00:00 PM Failed
      5 ID03 5/5/2013 9:00:00 AM Closed

OffersList表格中,我将HL#重命名为HLID并放弃了Status字段。通过这些表更改,下面的查询将在Access 2007中返回此输出。

HLID Status
ID01
ID02 Failed
ID03 Closed
ID04
SELECT o.HLID, sub2.Status
FROM
    OfferList AS o
    LEFT JOIN
    (
        SELECT l.HLID, l.Status
        FROM
            (
                SELECT HLID, Max(lDate) AS MaxOflDate
                FROM Ledger
                GROUP BY HLID
            ) AS sub1
            INNER JOIN Ledger AS l
            ON
                    (sub1.MaxOflDate = l.lDate)
                AND (sub1.HLID = l.HLID)
    ) AS sub2
    ON o.HLID = sub2.HLID;