MS Access 更新 Oracle 数据库 - 查询问题
Posted
技术标签:
【中文标题】MS Access 更新 Oracle 数据库 - 查询问题【英文标题】:MS Access Updating Oracle Database - Query Problems 【发布时间】:2013-04-18 10:15:29 【问题描述】:我目前遇到了更新查询的问题,该查询更新了我们的一个 Oracle 表中的一列。基本上,我们将一个 CSV 文件导入 Access,将其命名为“NewULN”,然后使用该文件中的条件来更新我们的表格。
如果您手动输入人员代码,此脚本可以正常工作。它用正确的结果相应地更新表。代码如下:
UPDATE NewULN INNER JOIN FES_PEOPLE ON NewULN.MISIdentifier = FES_PEOPLE.PERSON_CODE SET FES_PEOPLE.UNIQUE_LEARN_NO = [NewULN].[ULN]
WHERE (NewULN.ULN Is Not Null) AND (FES_PEOPLE.PERSON_CODE=[Enter Person Code]);
我们现在希望一次性更新所有记录,但我们一直很难做到这一点。这是我认为下面的代码可以:
原始代码:
UPDATE NewULN INNER JOIN FES_PEOPLE ON NewULN.MISIdentifier = FES_PEOPLE.PERSON_CODE SET FES_PEOPLE.UNIQUE_LEARN_NO = [NewULN].[ULN]
WHERE (NewULN.ULN Is Not Null) AND (FES_PEOPLE.PERSON_CODE=NewULN.MISIdentifier);
最新版本(基于建议):
UPDATE NewULN INNER JOIN FES_PEOPLE ON NewULN.MISIdentifier = FES_PEOPLE.PERSON_CODE SET FES_PEOPLE.UNIQUE_LEARN_NO = [NewULN].[ULN]
WHERE (NewULN.ULN Is Not Null);
但是我们遇到了各种各样的错误 - 有时,当您尝试运行访问查询时,Access 会崩溃。
有时它会出现锁冲突(有趣的是,它会更新第一条记录,然后失败所有其他记录)。有时会弹出错误“FES_PEOPLE - 'invalid number'”,有时会弹出“Can bind a long value only for insert into a long column”。
字段 ULN 一直是 Text 并且之前一直有效,MISIdentifier 也一直是 Text(当我们在 Windows XP 上运行此版本时)但现在我已将其更改为 Long Int。
这不是我最初写的,在我们将机器升级到 Windows 7 后它就停止工作了,所以我现在不得不在几乎不了解 Access 的情况下重写它。
感谢我提前收到的任何回复
【问题讨论】:
【参考方案1】:在您的第二个查询中,您已经在 NewULN.MISIdentifier = FES_PEOPLE.PERSON_CODE
上执行了 JOIN,因此在 WHERE 子句中包含该条件也是多余的。也许这是在给工作带来麻烦?
【讨论】:
感谢您的意见,我什至没有注意到这一点。我取出 WHERE 子句中的位并运行更新,但出现锁冲突错误。它再次更新了第一条记录,但在其他 67 条记录上失败了。新代码: UPDATE NewULN INNER JOIN FES_PEOPLE ON NewULN.MISIdentifier = FES_PEOPLE.PERSON_CODE SET FES_PEOPLE.UNIQUE_LEARN_NO = [NewULN].[ULN] WHERE (NewULN.ULN Is Not Null );【参考方案2】:您使用什么 ODBC 驱动程序连接到 Oracle?如果使用 Microsoft for Oracle 驱动程序,请尝试改用 Oracle 驱动程序。 MS 驱动程序自第 7 版以来未更新,不应使用。
【讨论】:
【参考方案3】:事实证明,创建一个新的 Access 数据库并再次重新链接所有表使该查询能够正常工作。语法没有问题:-)
【讨论】:
以上是关于MS Access 更新 Oracle 数据库 - 查询问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 pass through query 从 ms access 访问 oracle 数据库表
MS-Access ODBC 连接到 Oracle for SQL