对链接的Oracle表的访问更新查询未正确更新

时间:2018-03-27 14:31:01

标签: oracle ms-access oracle11g access

我有一个链接的Oracle表到Access数据库,它有两个我想要更新的列:

Oracle:EAUSER_WELL_SUMMARY
- UWI(PK)
- MN_FORM
- MN_SRC

我在数据库中使用Access表来更新链接的Oracle表中的两列:

访问权限:TMP_FORM_SRC
- UWI(PK)
- MAIN_FORM
- MAIN_SRC

以下是正在使用的SQL:

    UPDATE eauser_well_summary 
       INNER JOIN [tmp_form_src] 
               ON eauser_well_summary.WELL_UWI = 
                  [tmp_form_src].WELL_UWI 
    SET eauser_well_summary.MAIN_HZ_FM = 
              [tmp_form_src] ! [MAIN_FORM], 
       eauser_well_summary.MAIN_HZ_SOURCE = 
       [tmp_form_src] ! [MAIN_FORM_SRC];

当我运行此更新查询(大约有3,300条记录)时,MN_FORM列保持未更新状态,但MN_SRC列最终会出现合并的混合源。例如,源是GS,GGX,TEAMDB,TRANSFORM_OVERRIDE和TRANSFORM。最后一栏是GGXBORM_OVERRIDE,GGXGXBORM_OVERRIDE,TRANSFORMNSFORMIDE等。

现在,如果我只为一个井运行更新查询,它会正确更新两个列。只有当我尝试做多个井时才会出现问题。

我尝试只更新MN_FORM,但是收到以下错误消息:

  

"由于类型转换,Microsoft Access未更新0字段   失败,因密钥违规而导致的0条记录,3361条记录所致   锁定违规,以及由于验证规则违规而导致的0条记录。做   你想继续运行这种类型的动作查询吗?"

当我点击“是”时,一条记录确实更新了。

我无法弄清楚锁定违规,因为我可以单独更新记录,而且,这是一个只有我的测试Oracle数据库,因此没有其他人在使用它。这与Access数据库相同。

我在网上搜索过,但找不到任何可以帮助我解决此问题的内容。任何帮助或指导都会有用。

谢谢!

更新:根据SunKing0提供的文章以及我从Erik von Asmuth找到的一些额外指示(谢谢你们两位),我几乎发现问题出在Oracle方面。如果我创建链接的Oracle表的Access表并运行更新查询,它将在没有锁定违规的情况下运行。 Erik建议使用DLOOKUP解决锁定违规问题,但这并不起作用。

在通过Access更新Oracle表时,是否有任何关于如何解决锁定违规的建议?有趣的是,它只发生在批处理模式下 - 如果我使用更新查询只更新一条记录,它会更新,没有错误或问题。

1 个答案:

答案 0 :(得分:0)

好吧,在阳光下尝试了一切之后,我的一位同事在网上找到了一篇关于Oracle ODBC驱动程序中已知错误的文档。它建议使用Microsoft提供的Oracle驱动程序。

我通过转到C:\ Windows \ SysWOW64 \ odbcad32.exe运行ODBC管理器,然后选择Microsoft Oracle ODBC来创建我的连接。然后,我使用新连接重新链接了我的Oracle表,并且能够使用以下代码更新表而没有任何问题:

UPDATE EAUSER_NFX_HZ_WELL_SUMMARY 
INNER JOIN TMP_FORM 
ON EAUSER_NFX_HZ_WELL_SUMMARY.WELL_UWI = TMP_FORM.WELL_UWI 
SET EAUSER_NFX_HZ_WELL_SUMMARY.MAIN_HZ_FM = [TMP_FORM]![MAIN_FORM], 
 EAUSER_NFX_HZ_WELL_SUMMARY.MAIN_HZ_SOURCE = [TMP_FORM]![MAIN_FORM_SRC];

以下是关于该错误的文章的链接:

Error updating linked table

希望这可以帮助那些遇到过这个问题的人。