更新时出现MS Access错误“操作必须使用可更新的查询”

时间:2012-05-08 11:56:46

标签: php mysql sql ms-access

我正在使用PHP PDO将MS Access系统迁移到mySQL系统。在PHP停止读取Access表上的某些记录之前,一切正常。此表具有ID字段,该字段是Long Integer数据类型。我不知道为什么,但ID从0到16949开始然后跳到36573745并结束于36581986.PDO读不了这些更高的数字,我无法弄清楚原因。

无论如何要解决这个问题,我试图更新这些更高的数字以继续下一个ID的正常序列。但Access无法理解我的查询,我不知道如何让它运行。

这是查询

UPDATE Validador_Manut SET ID = (
    SELECT (Max(ID) + 1) FROM Validador_Manut WHERE ID < 100000
) WHERE ID > 100000

它向我显示了此错误Uperation must use an updatable query

2 个答案:

答案 0 :(得分:1)

我想到了两件事。

1.)保留关键字

如果您使用某些关键字作为表名或列名,您可能会得到神秘的异常,并不能真正告诉您实际原因。

您的专栏ID看起来很可疑。

短暂的互联网搜索没有提供这个理论的证据,但我相信我会记得我在某个地方看到ID作为MS Access中的保留字。你可以尝试

  • 重命名列
  • 在尖括号[] (不推荐)
  • 中写入列名

2。)这篇文章看起来可能有所帮助:Solving the Operation Must Use An Updateable Query error

  

当Jet 4.0数据库(由“Access”mdb文件表示的实际数据库类型)部署在多用户环境中时,   每当打开数据库时都会创建.ldb文件。 .ldb文件   包含详细信息,其中包括谁已打开文件,主要包括   用于防止其他用户写入打开的记录。

     

在ASP.NET应用程序的上下文中,“用户”依赖于平台:对于XP Pro机器,用户是ASPNET   帐户。在Windows Server 2003,2008和Vista上,它是NETWORK   服务帐户。但是,如果启用了ASP.NET Impersonation,   默认用户帐户将是IUSR_machinename,或以其中任何一个为准   您已申请的帐户。如果您不确定您的ASP.NET帐号   应用程序正在运行,Environment.UserName将返回它。至   能够创建,写入和删除所需的.ldb文件   相关用户需要对.mdb文件夹的MODIFY权限   文件在。

     

要设置此权限,请右键单击App_Data文件夹(或您将mdb文件放入其中的任何其他文件夹)并选择   属性。查找“安全”选项卡。如果你看不到它,你需要   转到我的电脑,然后单击工具,然后选择文件夹选项....   然后单击“视图”选项卡。滚动到底部并取消选中“使用简单   文件共享(推荐)“。返回”安全“选项卡,需要添加   相关帐户到“组或用户名”框。点击添加....   然后单击高级,然后单击立即查找。适当的帐户应该是   上市。双击它以将其添加到“组或用户名”框,然后   检查权限中的“修改”选项。而已。你完成了。

     

注意:此修复程序还将解决“Microsoft Jet数据库引擎无法打开文件'(未知)”。它已经由   另一个用户,或者您需要获得查看其数据“错误。”的权限。

答案 1 :(得分:1)

如果您只想降低ID&gt; 16949之后的连续数字为100000 那么你为什么不试着这个呢?

UPDATE Validador_Manut SET [ID] = [ID]-36556795 WHERE ID > 100000 

36573745 - 36556795 = 16950