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

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

The Microsoft Jet engine stopped the process because you and another
user are attempting to change the same data at the same time.

当我尝试编辑表中的某些记录时,出现以下错误:

This record has been changed by another user since you started editing
it. If you save the record, you will overwrite the changes the other
user made.

Copying the changes to the clipboard will let you look at the values
the other user entered, and then paste your changes back in if you
decide to make changes.

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

我发现(参见下面的详细分析),当存在具有大量十进制数字的值的双字段时,问题就出现了.看到:

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个解决方法:

  • Add a timestamp column to the SQL table. (JET will then use only this field to see if the record has been updated.)
  • Modify the data type that is in SQL Server to a non-floating point data type (for example, Decimal).
  • Run an Update Query to update the record. You must do this instead of relying on the recordset update.

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

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

额外细节:

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

解决方法:

关于链表的结构的更多细节会有所帮助,但我会冒险猜测.

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

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

上一篇:MySQL连接提示输入密码,即使这是在连接字符串中


下一篇:我是否应该总是更喜欢使用准备好的SQL语句来获得性能优势?