使用 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 出错
如何使用 ODBC 驱动程序仅从 MS Access 向 MySql 自动插入新记录?
我可以将 MS Access 应用程序链接到 Linux 服务器上的 Postgresql 吗?可以/我应该使用 ODBC 吗?