使用 ODBC 链接到 MySql 时,MS Access 表单不刷新

Posted

技术标签:

【中文标题】使用 ODBC 链接到 MySql 时,MS Access 表单不刷新【英文标题】:MS Access form does not refresh when using ODBC link to MySql 【发布时间】:2012-01-23 14:17:11 【问题描述】:

我有一个使用 mysql ODBC 连接器连接到 MySql 表的前端 Access 2007 数据库。

问题在于,如果数据被网络上的其他用户更改或数据被弹出表单更改,则链接到表的表单将不会刷新其数据。

如果我创建一个检测更改的 VBA 代码,然后刷新表单或重新查询,那么以表格格式显示许多记录的表单将跳到顶部,并且一些用户将看不到记录这与他们相关,必须向下滚动才能再次找到它,这并不总是那么容易。

以前,当我只使用网络上的 Access 表时,如果数据发生变化,所有访问表单上的记录都会更新,并且表单不会滚动回顶部...

如果 MySql 上的数据发生更改,是否可以让 Access 表单自动刷新其行?

一种可能的解决方案是,如果我可以让表单在刷新后滚动到完全相同的位置,但不确定是否可以这样做......

【问题讨论】:

【参考方案1】:

检查 Access 应用程序中的 ODBC 刷新间隔。默认值似乎是 1500 秒。也许较低的值将允许您的表单显示其更新的内容而无需代码干预。

Office 按钮 -> 访问选项 -> 高级,然后在该选项部分末尾附近找到 ODBC 刷新间隔。

Office 的较新版本 文件 -> 选项 -> 客户端设置 -> 向下滚动到高级 -> 更改 ODBC 刷新间隔(秒)

此外,由于您已创建代码来检测服务器上的数据更改,然后刷新表单以响应,您可以为表单设置书签,刷新,然后返回到已添加书签的表单行。

Recordset.Bookmark Property (DAO)

更新:将表单的记录集类型更改为动态集是解决此问题的关键。

【讨论】:

我刚刚尝试过 ODBC 刷新,但有趣的是,如果该行从可见屏幕滚动并返回,它只会刷新行数据,否则即使很难我设置刷新它也不会自行完成到 3 秒。至于有效的书签,但它将表单移动到记录并将记录放在屏幕顶部,而不是用户记住的位置。一个精确的滚动位置会做得更好。感谢 ODBC 设置... @Lumis 当用户从列表中选择一条记录时,列表查询不再是当前查询 您似乎是对的,Dynaset 无需重新查询或执行任何其他操作即可更新表单!【参考方案2】:

您的第一个问题“如果 MySql 上的数据发生更改,是否可以让 Access 表单自动刷新其行?”可以明确回答:No.

当 Access 填充您的表单时,表单中的数据表示将完全独立于数据库中具有相同主键的记录 - MySQL 不知道您对任何更改感兴趣,因此它不会通知访问(实际上:没有这样做的机制)

关于滚动问题:在 Access 2000 中,这可以通过激活记录来实现,这会将其滚动到视图中。我怀疑它可能与 Access 2007 类似

【讨论】:

这里的问题是如何让 Access 刷新它的行或整个表单,而不用在超过可见屏幕时将表单滚动回顶部? IIRC 诀窍是在表单上执行requery,然后激活之前激活的相同记录。将此粘贴到任何“有趣”的事件中

以上是关于使用 ODBC 链接到 MySql 时,MS Access 表单不刷新的主要内容,如果未能解决你的问题,请参考以下文章

删除/编辑 MySQL ODBC 链接表中的行导致 MS Access 出错

MS 通过 odbc 访问 mySql 连接慢

如何使用 ODBC 驱动程序仅从 MS Access 向 MySql 自动插入新记录?

我可以将 MS Access 应用程序链接到 Linux 服务器上的 Postgresql 吗?可以/我应该使用 ODBC 吗?

MS Access:在设计指南视图中创建链接表不显示要链接的表?

MS Access 中通过 ODBC 连接 MS SQL 表的查询非常慢