2

我目前遇到更新查询的问题,该查询更新了我们的一个 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'”,有时会弹出“只能绑定长值以插入长列”。

字段 ULN 一直是 Text 并且以前一直有效,MISIdentifier 也一直是 Text(当我们在 Windows XP 上运行此版本时)但现在我已将其更改为 Long Int。

这不是我最初写的,在我们将机器升级到 Windows 7 后它停止工作,所以我现在不得不在几乎不了解 Access 的情况下重写它。

感谢我提前收到的任何回复

4

3 回答 3

1

在您的第二个查询中,您已经在执行 JOIN,NewULN.MISIdentifier = FES_PEOPLE.PERSON_CODE因此在 WHERE 子句中包含该条件也是多余的。也许这会给作品带来麻烦?

于 2013-04-18T10:28:59.950 回答
0

您使用什么 ODBC 驱动程序连接到 Oracle?如果使用 Microsoft for Oracle 驱动程序,请尝试改用 Oracle 驱动程序。MS 驱动程序自第 7 版以来未更新,不应使用。

于 2013-07-09T14:40:46.887 回答
0

事实证明,创建一个新的 Access 数据库并再次重新链接所有表使该查询能够工作。语法没有问题:-)

于 2013-08-14T09:44:01.680 回答