2013-09-26 37 views
1

我如何更新任何字段值通過ms訪問中的VBA代碼。當我在組合框中輸入值時。當我輸入數據時,相關表格中的一些字段會更新。而其他則不。我該怎麼做才能解決這個問題。我如何更新任何字段值通過在ms訪問VBA代碼

在一個組合框中,我使用了me.refresh命令及其更新數據。而在其他組合框中,我做了同樣的事情,但是在我犯錯的時候沒有得到任何結果。

進一步是未註冊的軟件做了這樣的問題,以便它們在不同的時間表現不同。

回答

2

當您更改te xtbox /組合框/等表格中的記錄不會立即更新。 Access處理它的默認方式是等到記錄不再有焦點時,然後使用您所做的任何更改更新表中的記錄。

如果你願意,你可以通過使用可通過更新後的事件強制更新的記錄表中​​的以下內容:

Private Sub txtMyFieldName_AfterUpdate() 
    Me.Dirty = False 
End Sub 

然而,編輯現有記錄時,我只能這樣做。如果您正在輸入新記錄,那麼在每次更新控件後都不要觸發Me.Dirty = False。如果您在新記錄條目上觸發Me.Dirty = False,並且您還有必填字段尚未填寫,則會收到錯誤消息,指出必填字段不能包含空值。

+0

我無法理解你最後一句話。如果我輸入新記錄,那我該怎麼辦。 –

+0

after_update事件也適用於綁定和未綁定的控件? –

+0

我更新了我的答案以澄清一點。 – Linger

2

表單上的(綁定)控件值的更改與基礎字段值的更新之間存在細微的概念差異。在'update'事件被觸發之前,基礎字段的值可能不會被更新。

,當然,如果你正在處理與控制是未綁定的,不能有任何字段更新...

編輯:

如果你想以編程方式更改未綁定控件的值:

myForm.controls(myControl).value = "whatever" 

如果要更改綁定的控件和基礎字段,在現場側工作

myForm.recordset.fields(myField).value = "whatever" 
myForm.recordset.update 

然後,您可能需要刷新屏幕上的控制,使其顯示更新值

而在控制方面

myForm.controls(myControl).value = "whatever" 

你可能再需要觸發更新編程(recordset.update)事件在您的基礎控件上

+0

那麼我如何更新任何未綁定的控件lostfocus事件發射時。 –

+0

據我記憶,這取決於你如何放鬆焦點:如果它是通過ESC鍵,更新可能不會被解僱。如果是通過Enter或TAB,它將被解僱。將一些debug.print消息添加到事件以及更新過程之前/之後,並檢查不同事件的管理方式。我想你也可以在事件層次結構中找到一些幫助。 –

相關問題