2015-01-10 49 views
0

當使用Access UI並設置屬性以將值添加到文本框(或其他控件)時,性能(速度,內存使用情況等)是否存在差異當正確使用對象變量時使用VBA做同樣的事情?訪問用戶界面(controlsource屬性)vs VBA性能

例如,假設我想從列表框中選擇一個項目,並將所選記錄的值添加到2個文本框控件中。

Private Sub lstTest_AfterUpdate() 
Dim lstA As Control 

Set lstA = Me.lstTest 

Me.txtTest1 = lstA.Column(0) 
Me.txtTest2 = lstA.Column(1) 

Set lstA = Nothing 

End Sub 

我可以通過屬性窗口中txtTest1還設置使用的MS Access UI控件屬性和txtTest2控制的:我可以通過使用列表框的AfterUpdate事件過程中的以下VBA代碼做到這一點以下達到相同的結果。

txtTest1控件:=[lstTest].[Column](0)

txtTest2控件:=[lstTest].[Column](1)

是否有就性能而言這2種方法之間有什麼區別?任何有關此文件將不勝感激。

回答

0

有一點差異,但並不是真正打破或破壞應用程序性能的任何事情。

第一個例子可以被認爲是更好的,因爲這些值被「填充」到其他控件中。當然問題是下次你加載表單時,如果txtTest1/2是UNBOUND,那麼當下次加載表單時,你可能不得不運行一些代碼來重新加載值。 (所以這使得第一個例子變得更糟)

因此在第一種情況下,這些值將不會持續下一次載入窗體(或導航到不同的記錄),那麼這些值將不會更新,因爲您的第一個示例僅在after update事件觸發時更新值。更新事件之後,只有在更改組合框時觸發,而不是在通用表單加載或導航。

所以這個問題可能不是性能,但只是你的第一個例子不會工作,也不會在下次窗體加載時顯示數據(除非當然文本框綁定到底層的列)。

由於在加載表單或記錄導航時需要始終運行代碼,因此最好使用控制源方法,因爲在這兩種情況下,您可能希望這些值正確顯示,因此在這兩種情況下都必須無論如何引用.column()屬性。

+0

這很有道理,我大多隻是好奇兩種方法之間的任何細微差別。我通常更喜歡儘可能地使用Access UI,並且在測試時,似乎控制源方法可能效率更高,但很難說清楚。謝謝! – user3654610

+0

使用控制源方法似乎有一點需要注意,如果您使用INSERT SQL字符串編輯記錄,則必須使用AfterUpdate事件,否則將不允許用戶編輯數據。 – user3654610