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

TMS*_*TMS 5 mysql ms-access odbc mysql-odbc-connector

我正在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);
Run Code Online (Sandbox Code Playgroud)

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

该问题已记录在案:

http://support.microsoft.com/kb/280730,提出了以下三种解决方法:

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

但是,这三种解决方法都不令人满意。只有第一个可以,但是这种解决方法不起作用-符合预期。它可能仅适用于MS SQL Server。

是否有其他解决方案/变通办法解决此问题?

额外细节:

  • MySQL服务器只适合我,其他人都无法访问它。
  • 插入新记录效果很好。
  • 该表的主键定义明确。
  • 重新启动MS Access没有帮助。
  • 删除到ODBC表的链接并再次链接它也无济于事。
  • 从全新的Access数据库链接表没有帮助。
  • 将MySQL数据库引擎从MyISAM更改为InnoDB也无济于事。
  • 权限没有问题,对此user @ host具有所有权限。
  • 我通常可以从服务器上的MySQL控制台删除记录,而不会出现问题。
  • 尝试设置MySQL Connector ODBC选项没有帮助:允许较大的结果,启用自动重新连接,允许多个语句,启用动态游标,强制使用仅向前的游标,不缓存仅向前的游标的结果。
  • 我在MySQL ODBC连接器中打开了调试功能,它创建了myodbc.sql日志,但是在编辑/删除时不包含任何相应的查询(不知道为什么)。

Aar*_*son 2

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

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

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