2013-08-02 130 views
1

在我的數據庫中,我有兩個表格與我正在處理的是相關的。第一個表是供應信息表(OfferList)。第二張表是關於報價(分類帳)進度的期刊。 OfferID在總帳分錄中被引用。但是,由於在分類帳中同一個商品有多個條目,因此我有一個引用特定條目的EntryID。兩種形式都有一個稱爲狀態的字段。每個Ledger.Entry的狀態不會改變,但要約的狀態會根據最後一個條目進行更改。我需要Access才能自動更新OfferID.Status,它基於我目前在我的表單中使用的Ledger.Entry。 I.E.我使用具有HLID,日期,狀態,註釋的Ledger.Entry表單。一旦完成Ledger.Entry並保存/更新分類帳表格,我希望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 

當我輸入的是最後一行到總帳,我想在OfferList狀態的ID03更新到關閉。

+1

你可能不明白這個建議,但它不應該以這種方式來構造;複製狀態會使維護變得困難,並且錯誤將會蔓延。「報價」表中不應重複「狀態」,只需根據日期字段讀取「分類帳」表中最近的狀態即可確定。 –

+0

一個'OfferID'可以在一天內有多個'Status'變化嗎? – HansUp

+0

是的,我知道它不應該重複,但正如HansUp所問,OfferID在一天內可以有多個狀態。 – Dragonsen

回答

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領域。有了這些表的變化,下面的查詢返回訪問該輸出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;