我是一名研究学生,正在研究一个访问数据库,在那里我创建了一个连续的表单,用于一种滚动的电子健康记录格式。标题包括关于患者的信息,连续形式方面是一系列患者就诊。在标题中,我有一些子表单,这些子表单基于在标题中发布的patient_ID号码上的链接来填充(由vba宏生成,使得先前评论的患者不被重新访问)。这些子模型似乎显着滞后,以至于前一位患者的结果会进入下一位。子表单包含用户选择的相关数据。每个表单都有自己的表。它们主要基于patient_ID链接。
我试过了:
在表格的开放/等方面通过vba(见下文)强制重新查询。这两种方式都没有效果。试图在打开标题表单时运行这些。
Public Function RequeryMain()
Dim frmMain As Form
Set frm = Forms("FRM_continuous_reports_patient")
frm.Requery
End Function
Public Function RequeryHeader()
Dim frmHeader As SubForm
Set frmHeader = Forms("FRM_continuous_reports_patient").FRM_continuous_header_working
frmHeader.Requery
End Function
最后,用户必须单击以清除新条目的表单才会令人沮丧。它起作用了。
最终目标是打开表单并根据最新的patient_ID加载所有子表单。这可能需要涉及交错负载:(1)VBA脚本基于某些特征选择下一个患者并将patient_ID传递给主表单; (2)根据提交给患者的患者ID加载主要连续形式; (3)加载标题子表格和任何相关数据(虽然第一次看到这些数据应该是空白的); (4)完成后,返回(1)。
根据我的理解,这已经是它如何工作,但是子窗体加载太快了?我怎样才能解决这个问题?
希望有人可以帮助解释如何解决这个问题/纠正我对表格机制的任何误解。
答案 0 :(得分:0)
我知道这听起来很奇怪,但是子窗体实际上是在父窗体之前加载的。子窗体显示的滞后不是我遇到过的。不应该需要代码,可能不会更正。必须是表单/子表单设计,可能是他们的RecordSource。必须检查数据库以确定。
没有必要在VBA中创建表单对象以便重新查询。代码是否在主窗体后面? Me.Requery
对于主表单来说已经足够了。我总是给子窗体容器一个不同于它所拥有的对象的名字,比如ctrPatient。然后只需Me.ctrPatient.Requery
。
为什么不将子表格放在详细信息部分?
答案 1 :(得分:0)
回答您的问题,并提供在https://accessexperts.com/blog/2014/01/07/delay-loading-subforms-in-access/
引用的逻辑的精简版本是:
现在应该解决主要和子之间不同步数据的问题。
您不需要使用CASE语句,但它们的操作就好像您有一堆" If" /" ElseIf"所有人都坐在一起 - 除了CASE使其更容易遵循。它基本上从变量中获取一个值(即Select Case MyVariable);然后检查它是否等于你想要的(案例1,案例2等),如果是,那么你编码什么。