2013-02-12 83 views
0

我創建了2個表格;資產和資產移動。我還創建了主資產表單和資產移動表單。資產移動表格實質上是資產表格的複製品,但它具有AssetMovements表格,因爲它是記錄來源。我在AssetMovements表(AssetTag字段)中創建了一個查找,以便用戶可以從組合框中選擇一個資產標籤,並且該資產的詳細信息將自動填充到表單上的其他字段中。表單上唯一可編輯的字段是指「員工」的「位置」和「分配至」字段。 現在,一切正常,但問題是,如果我使用AssetMovements表單創建新記錄並保存它,位於「資產」表中的原始記錄中的「位置」字段將不會更新。則用在了原始記錄的「AssignedTo」字段。MS Access:保存子記錄時更新父記錄

有沒有辦法更新每當這個記錄的創造了一個新的AssetMovement資產表中的主要資產記錄?

+1

您必須在* Assets *表中存儲*位置*和* AssignedTo *嗎?似乎可以根據需要從最新的* AssetMovement *記錄中找到匹配* AssetTag *的記錄。 – HansUp 2013-02-12 17:44:12

+0

你讓ACCESS創建一個空白記錄然後填入信息? – Kassabba 2013-02-12 18:17:11

+0

Hello @HansUp,如果我沒有將它們存儲在_Assets_表中,這意味着對於新資產,我將首先創建主_Asset_記錄,然後創建一個_AssetMovement_記錄,以便爲該資產提供一個位置。似乎它會讓事情變得複雜.. Kassabba,不,沒有空白記錄。 – 3ph 2013-02-12 22:17:25

回答

0

這聽起來像你是什麼試圖做的是追蹤資產的歷史(它屬於哪裏以及誰),自然而然的方法是更新資產,並將變更記錄在AssetMovements表中。在許多數據庫中,您可以使用觸發器來完成此操作。無論您是通過UI更新資產還是直接進行SQL查詢,它都不會失敗。但是,MS Access本身沒有觸發器。所以你會被限制在UI中這樣做。

您可以通過向表單添加After Update事件並將更改後的記錄複製到AssetMovements來在UI中執行此操作。而不是相反。否則,對於新的資產,您首先創建AssetMovement,然後創建資產。

我也使用了HansUp的建議 - 即只將位置/賦值放在AssetMovements中,並在窗體/報表上顯示最新值。我不喜歡的是它使表單更復雜一點,如果你有很多更新發生,你最終可能會遇到性能問題。

然後再次,如果您的數據庫變得足夠大以至於性能下降很明顯,那麼您應該可以將數據遷移到另一種數據庫。

+0

感謝您的迴應CodeSlave。我試圖追蹤資產的歷史。 我認爲將更改的記錄複製到AssetMovements表是個好主意。但是,如何在「位置」和「分配到」字段上設置「更新後」事件,以便在更新任何字段時將記錄副本保存到AssetMovements表中? – 3ph 2013-02-12 22:24:18

+0

您可以在Location/AssignedTo字段AfterUpdate事件中單獨設置它,但每次更改其中一個時,但在將記錄提交到數據庫之前,都會創建一條記錄。相反,我會在Form的AfterUpdate事件過程中直接(通過ADO或DAO)將新記錄添加到AssetMovement表中。右鍵單擊表格中標尺旁邊/上方的框,選擇屬性,然後轉到事件選項卡。這將是列表中頭幾項事件之一。點擊省略號並選擇代碼生成器。從那裏,它是VBA代碼。 – BIBD 2013-02-12 22:47:39