我一直在努力解决这个问题,然后在一些帮助下,然后搜索它;但我没有运气 . 所以我决定问 .
我在Access 2007中有两个表单,可以调用它们 MainForm
和 EntryForm
.MainForm
有一个子表单和一个按钮 . 该按钮在添加模式下打开 EntryForm
. 我想要做的是当 EntryForm
保存新记录时它将更新(重新查询) MainForm
中的子表单 .
我试过这个设置代码
Private Sub cmdSaveAndClose_Click()
DoCmd.Save
'requery list
Forms![MainForm]![subformName].Requery
'' I've also tried these
'Forms![MainForm]![subformName].Form.Requery
'Forms.("MainForm").[subformName].Requery
'Forms.("MainForm").[subformName].Form.Requery
DoCmd.Close
End Sub
这些尝试似乎都不起作用 . 有没有办法解决这个问题?我在这里先向您的帮助表示感谢 .
6 回答
只是对完成此方法的方法发表评论:
您将EntryForm永久地绑定到您正在调用它的表单上 . 我认为最好不要将形式与这样的背景联系起来 . 我将从Save / Close例程中删除requery,而是使用acDialog开关以模态方式打开EntryForm:
这样,EntryForm就无法在一个上下文中使用 . 另一种方法是使EntryForm复杂化,这些知识可以通过哪种形式打开它以及需要重新获取的内容 . 我认为最好将这类内容保持在与其使用的上下文接近的位置,并尽可能简化被调用表单的代码 .
也许这里的一个原则是,无论何时你使用另一种形式的Forms集合重新查找表单,这都是一个很好的迹象表明你的架构不正确 - 在我看来这应该很少发生 .
您必须使用子窗体控件的名称,而不是子窗体的名称,尽管这些通常是相同的:
或者,如果您在主表单上:
更多信息:http://www.mvps.org/access/forms/frm0031.htm
我上面尝试了几种解决方案,但没有解决我的问题 . 将数据保存到数据库后刷新表单中的子表单的解决方案:
Me.subformname.Requery
它对我来说很好 . 祝好运 .
通过关闭和打开,主窗体通常运行所有相关查询(包括与子窗体相关的查询) . 我有一个类似的问题,并通过在点击事件上添加以下保存命令按钮解决它 .
我有类似的问题,但有一些差异......
在我的例子中,我的主窗体有一个Control(供应商),我用它来更新我的数据库中的Query,使用以下代码:
从一开始我的子表单记录源是名为“Qry_Pedidos realizados e importados”的查询 .
但是,我可以更新主窗体上下文中的子窗体数据的唯一方法是将子窗体的数据源刷新到它自己,如下面发布的:
毕竟不需要刷新,重新计算,重新查询等等......
刚刚发现,如果使用adodb更新子表单的源表,则需要一段时间,直到重新查询可以找到更新的信息 .
在我的情况下,我用'dbconn.execute“sql”'添加了一些记录,并想知道为什么vba中的requery命令似乎不起作用 . 当我调试时,requery工作 . 在重新查询之前在代码中添加了2-3秒等待,以便测试产生差异 .
但更改为'currentdb.execute“sql”'立即修复了问题 .