簡體   English   中英

MS ACCESS:表格和子表格完全鏈接? 還是表格和未綁定的連續子表格?

[英]MS ACCESS: Form and subform to fully link? or Form and unbound continous subform?

我正在嘗試設計一個名為“Master PO”的采購訂單表單,其中包含一個名為 POContent 的連續子表單。 為此,我使用了 2 個名為 tblMasterPO 和 tblPOsContent 的表。 這是它的屏幕截圖:

截屏

關鍵是主 PO 表單是一個拆分視圖,頂部是數據表視圖,底部是文本和組合框的組合。 “PO 內容”子表單是主 PO 表單下部的連續表單。

在我的公司,我們正努力記錄我們對采購訂單所做的每一次更改以供將來分析,因此需要采購訂單修訂號。 這個想法是每次我們對主 PO 或 PO 內容進行更改時,當用戶單擊“保存/更新 PO”按鈕時,我將使用(大量)VBA 代碼創建一條新記錄,其中包含更新的數據. 表單/子表單組合並不是最好的調用方式,因為它實際上應該是 2 個完全鏈接的表(如果 PO 內容發生更改,則主 PO 也將使用新的 ID# 進行更新)。

我有多個問題要達到使此表單工作的目標:

  • 確保我可以自由切換到表單和子表單字段的最佳方式/做法是什么? 例如,同時弄臟兩個表? 或者有一個未綁定的連續子表單? 還是臨時表?
  • 如果我使用未綁定的連續子表單,如何讓用戶在向 PO 添加新項目時添加行? 例如,我希望用戶單擊數據表表單以查看 PO,然后將 PO 內容項填充到未綁定的子表單中。 但是當用戶點擊“新建采購訂單”按鈕時,主采購訂單和采購訂單內容字段中的任何一個都沒有數據,因此用戶可以在表單和子表單中添加項目,最后通過點擊“保存所有內容”保存/更新采購訂單”按鈕。

您是否有任何提示或想法可以使這項工作在訪問中發揮作用?

我知道會有很多VBA,但我很期待; 我只是想從經驗豐富的訪問程序員那里找到解決方法/解決方案!

謝謝!

編輯1:

基本上,在創建 PO 時,工作流程是首先添加一般信息,例如,誰在創建 PO、什么日期、它與什么項目相關等; 這些 go 到“主 PO”表。 然后,您想實際將項目添加到此 PO,因此您有多行(例如,您需要 1x 包螺絲,然后需要 2x 包螺母等)。 完成 PO 后,您最終可以使用“保存/更新 PO”按鈕將其保存,這會將所有內容保存在專用表中。

如果我開始向子表單添加項目,父表單確實會自動更新,但這是我試圖“暫停”的內容,同時我在子表單中添加部分。 “最簡單的”可能是有一個表將兩者結合起來,但如果我必須為每個“PO 內容”行保存相同的一般信息(意味着每次我向采購訂單添加項目時,數據庫將增長得非常快,我將保存供應商、用戶名、訂購日期...); 對於我訂購的每個項目,每個修訂版,每個 PO,我的表格中都會有 100 多列!

設置標志或公共變量是我研究過的,但我不確定在向子表單中添加項目時如何停止主表單的輸入。

弄臟父文件也是我想過的; 但這意味着我們在創建 PO 時將有 2 個“通用數據”實例,因為您將首先將項目添加到主 PO 字段中,然后移動到 PO 內容子表單,該子表單將自動將主 PO 數據保存在 ID 下#. 然后,當實際向子表單添加項目時,它會重新整理父表單,為相同的數據創建另一個 ID#;

我們可以同時合並兩個條目嗎? 某種 2 表完整鏈接,因為沒有另一個就不存在?

我不確定需要多少 VBA。 父表(父窗體)的保存在 Access 中是自動的。 在您將焦點更改為子表單的那一刻,父表單記錄被保存(它真的很好,它以這種方式工作)。

至於子表格中的更改/修改,您需要更新父母表格的訂單號嗎?

好吧,除非您對那一行進行了更改,否則子表單中的更改前事件不會觸發。 所以你可以go:

me.Parent.form!PONum = "some new number".

但是,不清楚您是否只想對子表單中的多個更改進行一次更改,或者您想對一個給定的 go 中的“許多”更改執行此操作?

我敢打賭,即使您更改了幾個子表單行,這個新的 PO 更新也只會發生一次。 所以,這可能是一個挑戰。 在這種情況下,我可能會在子表單(公共變量 - 代碼模塊的開始)中設置一個表單級別標志。因此,一旦任何更改事件觸發,它可以設置這個標志,表明一個或多個記錄已被更改。因此,此時,我們需要一個“時間點”,在這個時間點,我們更新父表單,因為其中一個或幾行已經更改。注意,父表單可以查看,get/grab/test/查看子表單中的“標志”是否顯示更改。那么,問題是用戶在完成后如何“行動”?因為他們可能會決定在該子表單中需要進行更多更改 - 並做一些更多的編輯。但是,如前所述,這僅意味着我們的子表單更改標志仍將顯示為真。

那么,關鍵問題就變成了在什么時間點以及我們如何決定它們完成? 一旦我們確定了這一點(可能是關閉表單???),我們就有了一個時間點,在該時間點我們知道子表單行(1 行或許多行)已更改。 因此,當我們離開該記錄時,我們需要在主表單中檢查這個更改的標志,或者說關閉表單。

在這種情況下,我實際上要做的是確保用於編輯的子記錄會導致主記錄變臟。 這樣,無論用戶如何離開當前的主記錄,更改前的事件都會觸發,此時您可以檢查子表單是否有更改(使用該標志)。 因此,您可以在某個時間點更新新的采購訂單號,並將記錄復制到更改歷史記錄中。 (應該只有幾行 VBA - 2-3 插入也許?

編輯:好的,一個緊迫的問題當然是如何完成整個事情,但沒有必要保存它。 好吧,通過綁定 forms,我們可以節省大量代碼。 但是我們如何處理一些可能沒有完成、沒有必要完成、可能需要更多編輯的事情,然后我們就完成了?

好吧,毫無疑問,最終用戶並不關心關系數據庫理論,當他們看到一個表單時,他們只會想到“保存”。 但是當我們引入相關數據(例如子表單)時,訪問不是這樣工作的。 但是,我們沒有能力將主表單(表)和子表單(表)包裝在一個事務概念中。 您可以在其他系統中執行此操作,但話又說回來,它們使用的是斷開連接的記錄集,並且不像我們在 Access 中那樣編寫用於編輯的代碼可以節省大量成本。

例如,我有一個募捐系統。 問題在於,在數據輸入期間,您必須輸入所有捐款。 就像經典的快速書屏幕一樣,您會輸入 100 美元,但隨后必須將該金額分成多個帳戶。 而且我不允許保存數據,除非拆分金額與主要記錄捐贈金額相匹配。 但是,既然我們沒有“保存”,那就是表單+子表單的結果?

好吧,我介紹了他們過去的所作所為。 - (批處理),所以。 我允許用戶為一個事件輸入許多 dontaitons。 他們可以拆分每個金額的帳戶,他們可以編輯,可以添加,可以改變主意 - go 離開,go 用於咖啡。 回來再編輯一些。 但是我添加了一個 POST 工作按鈕,所以,當他們輸入數據后,1 捐贈,也許 20,當他們點擊發布完成工作時。 我然后檢查拆分金額是否與捐贈金額匹配,如果不匹配。 然后我不允許他們發帖,但是。 該帖子不是發布數據的大型計算機運行。 它只是主要后期運行中的一個字段。 因此,除非金額匹配,否則您不能發布,並且一旦發布。 然后我不允許他們編輯或更改該數據:屏幕如下所示:

在此處輸入圖像描述

那么,在上面? 那就是事件(日期、時間、附加信息)。 它還具有批處理運行和psoting 狀態。 左邊是人+捐款金額,右邊是給定金額的拆分。 (如果拆分出的金額與捐贈金額相匹配,則總框變為綠色。但我仍然允許他們繼續工作——即使金額不匹配。但直到設置了張貼標志?然后我不包括那個報告和系統中的數據。因此,發布不會移動記錄或任何東西 - 但我只更改所有記錄所屬的一批標志。我在提取該數據的查詢器中包含該已發布標志 - 如果沒有發布標志,那么直到發布批處理運行時,該 rocord 才被認為是有效的,並且一旦發布。那么他們就無法編輯該數據。

在您的情況下,您可以有一個編輯按鈕。 在他們點擊編輯之前,您不允許對表單 + 子表單進行任何編輯。 一旦他們這樣做,你翻轉允許編輯=真,然后他們可以自由編輯主+子表單。 但只有他們有按鈕“完成”編輯(這可能是與編輯相同的按鈕 - 你隱藏一個顯示另一個)。 這樣,您就有了一個工作周期,他們在其中開始編輯,並且必須完成編輯。 完成后。 您甚至可以在他們離開或關閉表單時提示是否發布。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM