2010-09-07 52 views
4

我是Access VBA的新手,並使用在表格中顯示記錄的表單嚮導創建表單。這是一塊蛋糕。有沒有辦法來覆蓋使用窗體嚮導創建的Access 2007窗體的自動記錄更新?

但是,我在表單中得到的行爲是,當我移動記錄時,記錄的更新會自動發生。

我想要的只是當我點擊一個「更新」按鈕,我把表單放在更新。

看起來好像我可以從頭開始構建表單,以編程方式更新所有(無界)控件,然後以編程方式更新控件中的記錄,但是這看起來工作太多了。

有沒有辦法在Access中或使用VBA代碼「關閉」自動更新行爲?

謝謝!

回答

5

正如Robert所建議的那樣,您可以通過取消before update事件來避免保存已更改的記錄。該守則將是這個樣子:

Private Sub Form_BeforeUpdate(Cancel As Integer) 
    Me.Undo 
    Cancel = True 
End Sub 

然而,這種方法需要你放棄你的記錄所做的任何更改之前,你可以動過它。如果沒有Me.Undo,您可以取消更新,但Access不允許您移動到其他記錄。在移至另一個記錄之前,您必須保存或放棄對當前記錄的更改。

如果你想移動到另一個記錄但不放棄更改首先,我認爲你需要嘗試一個斷開的記錄集。它是您在內存中創建的ADO記錄集,不受任何數據源的約束。您可以添加一個命令按鈕來保存命令上的更改。如果聽起來有用,請參閱Danny Lesandrini在Database Journal發表的文章:Create In-Memory ADO Recordsets

+0

謝謝。我遇到了無法移動到下一個記錄的問題(不包括'Me.Undo')。至於拋棄更改,這可能是正確的。我只是提醒用戶,如果表單髒了,更改將被丟棄。無論如何,我現在就試試這個。 – John 2010-09-08 14:49:41

+0

感謝您提供這個答案,HansUp。它幫助我解決了一個簡單的查詢構建表單導致無意編輯查詢表的問題。哎呦! :D – Zahhar 2012-12-05 07:48:50

1

有沒有辦法中獲得「關閉」從 的 自動更新的行爲,或使用VBA代碼?

您可以嘗試取消Form.BeforeUpdate事件,除非設置了標誌。單擊按鈕時,設置標誌,將Form.Dirty設置爲false(以保存數據),然後清除Form.BeforeUpdate事件處理程序中的標誌。

+0

聽起來很簡單。我會試一試。謝謝! – John 2010-09-07 20:11:36

1

爲什麼你想要? Access以記錄爲基礎在記錄上工作。不像Excel,只有當您選擇保存或退出時才保存電子表格。

這聽起來像你有一個連續的窗體上有多個記錄。做到這一點的唯一方法是使用「臨時」表,並在準備就緒後將「臨時」表的內容保存到永久表中。但是,除非您做了更多的工作,否則您將失去確定其他人是否更改記錄的能力。

+0

我想要的原因是UI的原因。我設計表格的人喜歡用紙比她喜歡的電腦好得多,並且自動更新內容會讓她無法接受。我可以更加明確和刻意地進行編輯,效果會更好。感謝您的建議! – John 2010-09-08 14:47:45

3

如果用戶意外更改數據並移動記錄來記錄導致更新,也許您應該有一個編輯按鈕,以便在需要時纔開始編輯。您可以使用其他建議的代碼來撤銷更改,如果它們移動到另一條記錄,或者完全阻止它們移動,除非它們保存或取消。

+1

完成此操作的最簡單方法是將AllowEdits關閉,並有一個EDIT按鈕將其打開(並將其標題切換爲SAVE)。您還想要在編輯模式下阻止導航到其他記錄。它的完成程度取決於許多因素。您可以關閉導航按鈕並捕獲PageUp/PageDown和Ctrl-Home/Ctrl-End,但您還需要將Cycle屬性設置爲當前記錄。不知道這是否涵蓋了這一切,但它似乎對我來說是最簡單的方法。 – 2010-09-08 22:08:42

相關問題