我在 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
日志,但是在编辑/删除时它没有包含任何相应的查询(不知道为什么)。