5

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

3 回答 3

2

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

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

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

于 2013-01-19T12:50:51.440 回答
1

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

于 2019-12-09T17:51:59.157 回答
0

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

于 2013-10-22T18:59:14.207 回答