MS Access更新Oracle数据库 - 查询问题

时间:2013-04-18 10:15:29

标签: sql oracle ms-access sql-update

我目前遇到更新查询问题,该查询会更新其中一个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 - '无效数字'”,其他时候“只能插入一个长值才能插入长列”。

字段ULN一直是Text并且它以前一直有用,MISIdentifier也总是Text(当我们在Windows XP上有这个版本时),但现在我把它改成了Long Int。

我没有写这个,它在我们将我们的机器升级到Windows 7后停止工作,所以我现在不得不用很少的Access知识重写它。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

原来,创建一个新的Access数据库并重新重新链接所有表使这个查询能够正常工作。语法没有错: - )

相关问题