2

我正在使用 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

4

2 回答 2

1

我想到了两件事。

1.) 保留关键字

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

你的专栏ID在我看来很可疑。

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

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

2.)这篇文章看起来可能会有所帮助:解决操作必须使用可更新查询错误

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

在 ASP.NET 应用程序的上下文中,“用户”是谁将取决于平台:对于 XP Pro 机器,用户是 ASPNET 帐户。在 Windows Server 2003、2008 和 Vista 上,它是 NETWORK SERVICE 帐户。但是,如果您启用了 ASP.NET 模拟,则默认用户帐户将是 IUSR_machinename 或您应用的任何帐户。如果您不确定您的 ASP.NET 应用程序在哪个帐户下运行,Environment.UserName 将返回它。为了能够创建、写入和删除所需的 .ldb 文件,相关用户需要 .mdb 文件所在文件夹的 MODIFY 权限。

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

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

于 2012-05-08T12:16:18.537 回答
1

如果您只想将 > 100000 的 ID 降低到 16949 之后的连续数字,那么您为什么不简单地尝试一下呢?

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

36573745 - 36556795 = 16950

于 2012-05-08T12:47:10.003 回答