2009-10-28 58 views
4

我有一个Microsoft Access窗体绑定到具有计算列的链接的SQL Server表。我有一个绑定到计算列的控件。如何获取Microsoft Access窗体来刷新计算列?

我已经意识到计算字段不能刷新,直到记录保存后。除此之外,刷新保存后绑定到计算列的文本框的最佳方式是什么?

我不想做一个me.requery(整个记录集的重新查询)。

有没有办法只刷新一个字段?

回答

7

编辑澄清:实际上有几个策略需要考虑。

Form.Refresh()将刷新你的窗体的记录捕获修改和删除现有记录并会留定位在当前记录。但是,您不会看到自您打开表单后添加的任何NEW记录。

Form.Requery()将重新运行窗体的记录源查询。你会看到所有的Form.Refresh()变化,它会显示任何新的记录。在UI上,Form.Requery()重新定位到第一条记录。

Form.Control.Requery()是在类似于Form.Refresh(),你将不会改变记录位置或看到了新的记录。它将更新您的控件,假设控件基于查询/表格。

您需要确保触发事件涉及数据库更新。可能会出现控件的AfterUpdate()在数据库I/O之前的情况,这对您没有任何帮助。

+0

相信对于绑定的字段,其中的计算是在下层记录源,或者,在这种情况下,在服务器上的视图中,Requery和Refresh之间没有区别。如果你正在计算窗体本身的控件,Requery *是有用的。 – 2009-10-29 04:24:09

+0

请查看我的答案以获取我的确切分辨率。这使我走上了正轨。 – 2009-10-30 15:00:38

0

您是否尝试过?为基础记录集或绑定控件重新刷新?我期望它能够用于Jet/ACE后端,但与不同数据库服务器后端的交互将不可预测。

可能还有一个与您的ODBC刷新间隔的交互,但我希望手动刷新代码来处理。

在哪里调用它是另一个问题 - 我会假设适当的地方会在绑定到计算所基于的字段的控件的AfterUpdate事件中。但是您可能必须保存记录才能进行服务器端计算 - 单独进行刷新可能会或可能不会。我知道使用Jet/ACE数据源时,Refresh会保存记录,但我不确定它是否与ODBC数据源的行为相同。

1

谢谢你们。这是什么工作。

在Form AfterUpdate事件中,我做了一个Me.ControlName.Requery。这是完美的,因为它没有做一个完整的表格刷新或重新查询。

我刚刚尝试过不同的事件/方法组合,直到获得最佳结果。

感谢您的意见。

塞特

1

2016(相关)回答:在访问2016年,我有一个控制是在4个其它装订文本框基于值的计算字段。我将计算字段的控制源设置为=gsngCalculatePaymentAmount([txtInterestRate],[txtLengthOfLoanInYears],[txtSalePrice],[txtMoneyDown])

但是我需要刷新值,只要这4个文本框中的任何一个的值发生了变化。难以使计算值更新。解决方案:在每个4个文本框正在使用计算出的字段,其值的更新后事件,我只是做了以下内容:

Dim v1 As Variant 
v1 = Me.txtMyCalculatedTextbox 

简单地引用计算字段的值来解析吧! 雷克斯

0

我这样做的(的txtTextBox控制源是SQL Server的字段,其值被计算):

On Error Goto ErrorHandler 


'After saving data when I wanted to see the updated value of computed field 

txtTextBox = txtTextBox & "" 

ErrorHandler: If err.Number = -2147352567 Then 'The data has been changed. 

          Resume Next 

        else 

         msgbox err.description 

       end if