我正在开发一个MS-Access应用程序,其数据位于单独的后端数据库(也称为MS-Access)中。主窗体包含一个用于打开设置对话框的按钮,一个退出按钮(均在窗体标题中)和一个导航控件,其中带有许多选项卡,这些选项卡显示了窗体详细信息中的子窗体。设置对话框是一个弹出窗口。在对话框中,用户可以更改后端数据库的路径,如果用户保存设置,则所有链接的表将自动重新链接。这一切都很好。
但是,在关闭对话框之后,重新查询活动的子表单无效,仅当我关闭并重新打开表单(例如,通过单击其他选项卡)时,它才会显示来自新(重新链接的数据库)的数据。
我认为这与我重新链接vba代码无关。
我试图直接打开子窗体,并使用链接表管理器,结果相同。在功能区上单击刷新按钮没有任何作用,只有当我更改为设计视图并返回到表单视图时,表单中的数据才会被更新。
我还尝试了重新绘制,刷新和重新查询的不同组合,但无济于事。
我在代码中广泛使用了重新查询,并且效果很好,但是似乎在简单地重新链接了链接表之后,并没有这样做。不同的后端数据库具有完全相同的结构,它们只是重复的,删除了一些记录以具有测试用例。
这是怎么回事?
关于奥利弗(Oliver)
答案 0 :(得分:2)
我认为,如果您使用子表单的SourceObject属性而不是绑定它们,则可以在不关闭表单的情况下强制进行更新。
Form_myForm.mySubForm1.SourceObject = ""
Form_myForm.mySubForm2.SourceObject = ""
运行重新链接例程
Form_myForm.mySubForm1.SourceObject = "mySubFormQuery1"
Form_myForm.mySubForm2.SourceObject = "mySubFormQuery2"
Form_myForm.mySubForm1.requery
Form_myForm.mySubForm2.requery
这只是猜测,我从没有遇到过需要在运行时重新链接的情况,但是我认为它应该可以工作。
答案 1 :(得分:2)
谢谢Jeffrey,您的回答为我指明了正确的方向。我不知道SourceObject
属性。但是,这是保存实际子窗体的子窗体控件的属性。在我的导航控件的特殊情况下,导航子表单控件保存了活动子表单,该子表单在选项卡上定义为NavigationTargetName
。
所以我的代码如下:
' ContentContainer is the NavigationSubform control
srcObjStr = Me.ContentContainer.SourceObject
Me.ContentContainer.SourceObject = ""
UpdatePathes 'Relinking
Me.ContentContainer.SourceObject = srcObjStr
甚至不需要重新查询。很好。
关于奥利弗(Oliver)