2013-04-18 62 views
2

我目前遇到更新查询问题,它在我们的某个Oracle表中更新了一列。基本上我们将一个CSV文件导入到Access中,将其称为'NewULN',然后使用此文件中的条件来更新我们的表格。MS Access更新Oracle数据库 - 查询问题

如果您手动输入人员代码,此脚本工作正常。它会相应地更新表格并显示正确的结果。代码如下:

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知识来重写它。你已经在做

感谢我提前

回答

0

原来,创建一个新的Access数据库并重新链接所有的表再次启用此查询工作。语法没有错:-)

1

在你的第二个查询得到任何答复上NewULN.MISIdentifier = FES_PEOPLE.PERSON_CODE一个JOIN所以也包括在WHERE子句是多余的这一条件。也许这是在向作品投入一把扳手?

+0

感谢您的输入,我甚至没有注意到这一点。我拿出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不是空的); – Zakerias

0

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