如何获得Microsoft Access表单来刷新计算列?

时间:2009-10-28 14:43:38

标签: sql-server ms-access data-binding

我有一个Microsoft Access表单绑定到具有计算列的链接SQL Server表。我有一个绑定到计算列的控件。

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

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

有没有办法让JUST刷新一个字段?

5 个答案:

答案 0 :(得分:7)

为了清晰而编辑:实际上有一些策略需要考虑。

Form.Refresh()将刷新Form的记录源,捕获对现有记录的修改和删除,并将保持在当前记录中。但是,您不会看到自打开表单后添加的任何新记录。

Form.Requery()将重新运行Form的recordsource查询。您将看到所有Form.Refresh()更改,它将显示任何新记录。在UI上,Form.Requery()重新定位到第一条记录。

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

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

答案 1 :(得分:1)

谢谢你们。它起作用了。

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

我只是尝试了不同的事件/方法组合,直到我得到了最好的结果。

感谢您的投入。

赛斯

答案 2 :(得分:1)

2016(相关)答案:在Access 2016中,我有一个控件,它是一个基于4个其他绑定文本框中的值的计算字段。我将计算字段的控制源设置为(dom/input #js {:type "checkbox" :onClick (fn [e] (js/console.log e)) ;; how do I get the current true/false value from `e` ? })

但是,只要这4个文本框中的任何一个的值发生变化,我就需要刷新该值。难以使计算值刷新。解决方案:在4个文本框的EACH中的AfterUpdate事件中,其值用于计算字段,我只是执行以下操作:

=gsngCalculatePaymentAmount([txtInterestRate],[txtLengthOfLoanInYears],[txtSalePrice],[txtMoneyDown])

只需引用计算字段的值即可解决它! 雷克斯

答案 3 :(得分:0)

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

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

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

答案 4 :(得分: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