访问 UI(控制源 属性)与 VBA 性能
Access UI (controlsource property) vs VBA Performance
使用 Access UI 并设置 属性 以将值添加到文本框(或其他控件)时,性能(速度、使用的内存等)是否存在差异反对在正确使用对象变量的情况下使用 VBA 做同样的事情?
例如,假设我想 select 列表框中的一个项目并将 selected 记录中的值添加到 2 个文本框控件。我可以通过在列表框的 AfterUpdate
事件过程中使用以下 VBA 代码来做到这一点:
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
我还可以使用 MS Access UI 通过 txtTest1 和 txtTest2 控件中的属性 window 将 ControlSource 属性 设置为以下以获得相同的结果。
txtTest1 控件来源:=[lstTest].[Column](0)
txtTest2 控件来源:=[lstTest].[Column](1)
就性能而言,这两种方法之间有什么区别吗?任何关于此的文档将不胜感激。
有“一点”差异,但实际上并没有什么会影响或破坏应用程序性能的。
第一个示例可以被认为更好,因为值被“填充”到其他控件中。问题当然是下次加载表单时,如果 txtTest1/2 是 UNBOUND 那么下次加载表单时,您可能必须 运行 一些代码才能再次重新加载值。 (所以这让第一个例子变得更糟)
因此,在您的第一种情况下,这些值将不会持续存在,下次您加载表单(或导航到不同的记录)时,这些值将不会更新,因为您的第一个示例仅在更新后更新值事件触发。更新后事件仅在您更改组合框时触发,而不是在一般表单加载或导航时触发。
所以问题可能不是性能问题,而仅仅是您的第一个示例的问题将不会起作用,也不会在下次加载表单时显示数据(当然除非文本框绑定到基础列)。
由于代码需要始终 运行 在表单加载或记录导航发生时,您可能最好使用控件源方法,因为在这两种情况下您可能希望这些值正确显示,因此这两种情况你都必须引用 .column() 属性 无论如何。
使用 Access UI 并设置 属性 以将值添加到文本框(或其他控件)时,性能(速度、使用的内存等)是否存在差异反对在正确使用对象变量的情况下使用 VBA 做同样的事情?
例如,假设我想 select 列表框中的一个项目并将 selected 记录中的值添加到 2 个文本框控件。我可以通过在列表框的 AfterUpdate
事件过程中使用以下 VBA 代码来做到这一点:
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
我还可以使用 MS Access UI 通过 txtTest1 和 txtTest2 控件中的属性 window 将 ControlSource 属性 设置为以下以获得相同的结果。
txtTest1 控件来源:=[lstTest].[Column](0)
txtTest2 控件来源:=[lstTest].[Column](1)
就性能而言,这两种方法之间有什么区别吗?任何关于此的文档将不胜感激。
有“一点”差异,但实际上并没有什么会影响或破坏应用程序性能的。
第一个示例可以被认为更好,因为值被“填充”到其他控件中。问题当然是下次加载表单时,如果 txtTest1/2 是 UNBOUND 那么下次加载表单时,您可能必须 运行 一些代码才能再次重新加载值。 (所以这让第一个例子变得更糟)
因此,在您的第一种情况下,这些值将不会持续存在,下次您加载表单(或导航到不同的记录)时,这些值将不会更新,因为您的第一个示例仅在更新后更新值事件触发。更新后事件仅在您更改组合框时触发,而不是在一般表单加载或导航时触发。
所以问题可能不是性能问题,而仅仅是您的第一个示例的问题将不会起作用,也不会在下次加载表单时显示数据(当然除非文本框绑定到基础列)。
由于代码需要始终 运行 在表单加载或记录导航发生时,您可能最好使用控件源方法,因为在这两种情况下您可能希望这些值正确显示,因此这两种情况你都必须引用 .column() 属性 无论如何。