【问题标题】:MS Access error "Operation must use an updatable query" on Update更新上的 MS Access 错误“操作必须使用可更新的查询”
【发布时间】:2012-05-08 11:56:45
【问题描述】:

我正在使用 PHP PDO 将 MS Access 系统迁移到 mySQL 系统中。一切正常,直到 PHP 停止读取 Access 表上的某些记录。此表有一个长整数数据类型的 ID 字段。我不知道为什么,但是 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

【问题讨论】:

  • PDO 可能会将较大的数字四舍五入为 INT 值。您可能会查看PDO's bind param,因为您已经在尝试 PDO。 (即使该查询看起来不像准备好的语句)
  • @chapman84 我认为 PDO 在欺骗我。
  • 您可以尝试将该参数绑定为字符串而不是整数,然后查看您的查询是否有效。这可能会告诉您是否正在发生这种情况。

标签: php mysql sql ms-access


【解决方案1】:

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

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

36573745 - 36556795 = 16950

【讨论】:

  • 它抛出此错误:“无法更新 'ID';字段不可更新。” =S
  • 这意味着ID字段是自动编号,不能更改!没有简单的方法可以重置该数字。在MSDN support 上查看这篇文章。更好地阅读您的问题,也许您可​​以简单地删除自动编号标志(带有访问接口),然后重试上面的查询
  • 是的,刚刚在备用数据库上试过。如果 ID 是自动编号字段,则上面的查询不起作用。但是,因为您正在将此数据库迁移到 mySql 中,所以您可以将 Autonumber 更改为正常数值,然后上面的查询将起作用
【解决方案2】:

我想到了两件事。

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 模拟, 默认用户帐户将是 IUSR_machinename 或任何一个 您申请的帐户。如果您不确定您的 ASP.NET 是哪个帐户 应用程序正在运行,Environment.UserName 将返回它。到 能够创建、写入和删除所需的 .ldb 文件, 相关用户需要 .mdb 所在文件夹的 MODIFY 权限 文件在里面。

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

注意:此修复还将解决“Microsoft Jet 数据库引擎无法打开文件'(未知)'。它已经被 其他用户,或者您需要权限才能查看其数据”错误。

【讨论】:

  • 不,伙计,第二个建议不起作用,或者我做错了,我现在不知道。第一个我认为不是,因为我可以使用ID 字段进行简单的更新、插入或选择,你知道..
猜你喜欢
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 2010-10-03
相关资源
最近更新 更多