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

Posted

技术标签:

【中文标题】删除/编辑 MySQL ODBC 链接表中的行导致 MS Access 出错【英文标题】:Deleting/Editing rows in MySQL ODBC linked table results in error in MS Access 【发布时间】:2013-01-19 12:38:59 【问题描述】:

我在 Windows 7(64 位)下使用 MS Access 2003,在 mysql 服务器(5.0.51a-24+lenny5)上使用外部链接表,通过 MySQL ODBC 连接器连接(使用 5.1.10,因为最新的 5.1.11是越野车)。当我在 MS Access 中打开此表并尝试从中删除一些记录时,我收到以下错误:

Microsoft Jet 引擎停止了该进程,因为您和其他人 用户正试图同时更改相同的数据。

当我尝试编辑表格中的一些记录时,我收到以下错误:

自您开始编辑后,此记录已被其他用户更改 它。如果您保存记录,您将覆盖其他的更改 用户制作。

将更改复制到剪贴板可让您查看值 其他用户输入,然后将您的更改粘贴回来,如果您 决定做出改变。

但是,当我通过 MS Access 中的删除或更新查询执行此操作时,它工作正常!我无法直接从表中删除记录。

我发现(请参阅下面的详细分析),当double 字段的值包含很多十进制数字时,就会出现问题。见:

CREATE TABLE `_try4` (
  `a` int(11) NOT NULL default '0',
  `b` double default NULL,
  PRIMARY KEY  (`a`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

insert into _try4 values (1, NULL),(2, 4.532423),(3,10),(4,0),
     (5,6.34324),(6, 8.2342398423094823);

只有当您尝试删除/编辑最后一条记录(a = 6)时才会出现问题,否则就可以了!

记录了该问题:

http://support.microsoft.com/kb/280730 ,提出这 3 个解决方法:

时间戳列添加到 SQL 表。 (然后 JET 将仅使用此字段来查看记录是否已更新。) 将 SQL Server 中的数据类型修改为非浮点数据类型(例如,十进制)。 运行更新查询以更新记录。您必须这样做,而不是依赖记录集更新。

但是,这 3 种解决方法并不令人满意。只有第一个可能是,但这种解决方法没有奏效 - 正如预期的那样。它可能只适用于 MS SQL Server。

对于这个问题还有其他解决方案/变通方法吗?

其他详情:

MySQL 服务器仅供我使用,其他人无法访问它。 新记录的插入工作正常。 为该表定义了主键。 重新启动 MS Access 没有帮助。 删除指向 ODBC 表的链接并重新链接也无济于事。 从全新的 Access 数据库链接表没有帮助。 将 MySQL 数据库引擎从 MyISAM 更改为 InnoDB 也没有帮助。 权限没有问题,这个user@host的所有权限都有。 我可以正常从服务器的 MySQL 控制台中删除记录,没有问题。 尝试设置 MySQL 连接器 ODBC 选项没有帮助:允许大结果、启用自动重新连接、允许多个语句、启用动态游标、强制使用只进游标、不缓存只进游标的结果。 我在 MySQL ODBC 连接器中打开了调试,它创建了myodbc.sql 日志,但在编辑/删除时没有包含任何相应的查询(不知道为什么)。

【问题讨论】:

当前状态:未回答的问题;我使用了上面对我来说最简单的解决方法:将一些 double 字段(具有很多小数位的字段)转换为 decimal 【参考方案1】:

有关链接表结构的更多详细信息会有所帮助,但我会冒险猜测。

当我在 SQL Server 链接表中包含可为空的布尔字段时,我在 MS Access 2003 和 2010 中都遇到了类似的问题。似乎 JET 数据库存在可空 nit 字段的问题。查看此答案以获取更多信息:https://***.com/a/4765810/1428147

我通过使布尔字段不可为空并设置默认值来解决我的问题。如果您的问题与我的相同,但使用 MySQL,请尝试这样做。

【讨论】:

谢谢 Aaron - 我已经按照你的要求添加了表格结构【参考方案2】:

我在这里解决了同样的问题。解决方案是从表中的十进制字段中删除默认值。我能够保留十进制数据类型,但只需删除我之前使用 0.0000 定义的默认值,现在我设置为 null 并修复了错误。

【讨论】:

感谢 Cezar!我不再使用此设置,因此无法检查解决方案,但希望它能帮助其他人解决此问题!【参考方案3】:

我的解决方法是将表格数据复制到excel中,然后使用phpadmin清除表格,然后在excel中进行编辑并将“新”数据(即编辑后的所有数据)复制回访问。

【讨论】:

以上是关于删除/编辑 MySQL ODBC 链接表中的行导致 MS Access 出错的主要内容,如果未能解决你的问题,请参考以下文章

写入冲突消息突然开始出现在 ODBC 链接表中

如何从mysql中的表中删除重复的行

如何计算 MySqlDataReader 中的行数?

通过单击编辑按钮在引导模式中显示特定的行数据

MySQL删除具有引用不存在ID的参数的行

MySQL:删除所有超过 10 分钟的行