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。
额外细节:
myodbc.sql日志,但是在编辑/删除时不包含任何相应的查询(不知道为什么)。有关链接表结构的更多详细信息会很有帮助,但我会冒险猜测一下。
当我在 SQL Server 链接表中包含可为空的布尔字段时,我在 MS Access 2003 和 2010 中都遇到了类似的问题。似乎 JET 数据库存在可空 nit 字段的问题。查看此答案以获取更多信息:/sf/answers/333606731/
我通过使布尔字段不可为空并设置默认值来解决我的问题。如果您的问题与我的相同,但使用的是 MySQL,请尝试执行相同的操作。