我有一个Microsoft Access表单绑定到具有计算列的链接SQL Server表。我有一个绑定到计算列的控件。
我已经意识到在保存记录之后才能刷新计算字段。除此之外,刷新保存后绑定到计算列的文本框的最佳方法是什么。
我不想做me.requery(整个记录集的重新查询)。
有没有办法让JUST刷新一个字段?
答案 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