Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 如何使用VBA刷新导航窗格_Ms Access_Vba - Fatal编程技术网

Ms access 如何使用VBA刷新导航窗格

Ms access 如何使用VBA刷新导航窗格,ms-access,vba,Ms Access,Vba,我有一个前端数据库,我动态地向后端数据库添加一些链接表。接下来,我从隐藏的系统表中读取它们的ID,以便将它们添加到导航窗格中,在我创建的一些自定义组中 虽然我相信我使用了正确的表/值,但在完成MSysNavPaneGroupToObjects表中的插入后,我找不到任何方法来刷新导航窗格 关于我想要实现的目标的唯一信息可以在这里找到: 但是在我的例子中,所有的值都被成功创建(我想),但是我在导航窗格中看不到条目。有时它是有效的,但大多数时候我只看到空组 我想知道是否有人解决了类似的问题,或者有一个

我有一个前端数据库,我动态地向后端数据库添加一些链接表。接下来,我从隐藏的系统表中读取它们的ID,以便将它们添加到导航窗格中,在我创建的一些自定义组中

虽然我相信我使用了正确的表/值,但在完成MSysNavPaneGroupToObjects表中的插入后,我找不到任何方法来刷新导航窗格

关于我想要实现的目标的唯一信息可以在这里找到:

但是在我的例子中,所有的值都被成功创建(我想),但是我在导航窗格中看不到条目。有时它是有效的,但大多数时候我只看到空组

我想知道是否有人解决了类似的问题,或者有一个文档/论坛,我可以找到更多信息。谢谢

请尝试以下操作:

或者:

CurrentDb.TableDefs.Refresh

access中存在一个bug,您必须刷新导航窗格,以便它们显示,甚至关闭并重新打开

另一个选择是隐藏然后显示,但这可能只是像其他建议一样刷新它


隐藏

DoCmd.RunCommand acCmdWindowHide
展示

DoCmd.SelectObject acTable, , True

如果写入
MSysNav*
表的更改并不总是显示在导航窗格中,即使在关闭和重新打开数据库之后,那么这实际上不是“刷新”问题。其他一些东西可能会干扰这些表的更新,使您的更改无效

在一篇文章中,Wayne G.Dunn建议“这个[MSysNavPaneObjectIDs]表是在访问的突发奇想下重建的”,这可能会与应用程序VBA代码对该表的更新发生冲突。如果这是真的,并且MSACCESS.EXE希望在数据库打开时(有效地)以独占方式访问
MSysNav*
系统表,那么解决方法是确保在应用
MSysNav*
修改时,正在修改的数据库不会在MSACCESS.EXE中打开

一种方法是使用“主”数据库中的VBA代码

  • 将相关详细信息写入临时文本文件
  • 启动将执行更新的单独流程,然后立即
  • 使用
    应用程序关闭“主”数据库。退出
  • 单独的进程可以在另一个Access数据库、VBScript或任何您喜欢的程序中运行代码。会的

  • 从临时文本文件中读取相关详细信息
  • 更新主数据库中的
    MSysNav*
    表,而MSACCESS.EXE没有打开它
  • 删除临时文本文件
  • 使用主数据库重新启动MSACCESS.EXE,然后
  • 终止它自己
  • 两个过程之间共享的“相关细节”将取决于该方法的实施细节,但可能包括

    • “主”数据库的完整路径(以便单独的进程可以找到它)
    • MSACCESS.EXE的相关副本的完整路径(这样单独的进程可以在完成后重新加载主数据库),以及
    • 要在主数据库的
      MSysNav*
      表中添加或更新的项

    将值添加到表中后,如果单击导航窗格并点击[F5],是否会显示新条目?如果您关闭并重新打开数据库,它们是否会出现?谢谢,很遗憾,不,按F5键或关闭并打开数据库时,它们不会出现。您只是在第一次打开前端时添加链接表,还是在第一次打开前端后随时会出现这种情况?我正在使用表单选择目标数据库。当我选择目标数据库时,我会删除以前的链接表,然后重新创建链接表。我只有一个到数据库的正常路径,如“C:\path\to\database.accdb”。然后,我进行查询以查找新链接表的ID,并向SysNavPaneGroupToObjects表插入一个新行,对象ID为链接表的ID,组ID为我已经添加的组的ID。由于它有时会工作,而且我的6个表被分成两个不同的组,我相信这是正确的。“有时它会工作,但大多数时候我只看到空组。”-进一步谈到Wayne在他的代码注释中说的“这个[MSysNavPaneObjectIDs]表是在访问的突发奇想下重建的”。。。当正在更新的数据库未在MSACCESS.EXE中打开时,您能否尝试从另一个应用程序(例如,另一个Access数据库、VBScript或其他任何应用程序)运行代码(更新MSysNavPane*表),以查看结果是否更一致?谢谢,我必须在星期一尝试,因为我家里没有ms Access。我会让你知道它是否有效我确实尝试了你的建议,但没有任何区别,因此我认为ms access更新表和我的代码同时更新表之间存在冲突。当我最终解决此问题时,我将更新问题或提供答案。无论如何,谢谢你的时间。不幸的是,本周我没有时间彻底测试这些建议中的任何一个,我刚刚意识到我必须很快将奖金奖励给某人。在假期之间开始这个问题是一个错误的选择:)所以我将奖励这个答案,因为我觉得这毕竟不是一个令人耳目一新的问题,一旦我了解这个问题的原因,我将编辑/更新这个问题。谢谢你的建议Gord。我确实尝试了你的建议,但没有任何区别,因此我认为ms access更新表和我的代码同时更新表之间存在冲突。当我最终解决此问题时,我将更新问题或提供答案。无论如何,谢谢你抽出时间。
    DoCmd.SelectObject acTable, , True