首页 文章

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

提问于
浏览
1

我有一个链接的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

    好吧,在阳光下尝试了一切后,我的一位同事在网上发现了一个关于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];
    

    这是关于该bug的文章的链接:

    Error updating linked table

    希望这将有助于其他遇到此问题的人 .

相关问题