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

时间:2013-01-19 12:38:59

标签: 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 / MS中的查询时,它工作正常!我只是无法直接从表中删除记录。

我发现(参见下面的详细分析),当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也无济于事。
  • 权限没有问题,此用户@ host的所有权限。
  • 我通常可以毫不费力地从服务器上的MySQL控制台删除记录。
  • 尝试设置MySQL Connector ODBC选项没有帮助:允许大结果,启用自动重新连接,允许多个语句,启用动态游标,强制使用仅向前游标,不要缓存仅向前游标的结果。
  • 我在MySQL ODBC连接器中启用了调试,它创建了myodbc.sql日志,但在编辑/删除时却没有包含任何相应的查询(不知道原因)。

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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