我有一个链接的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 回答
好吧,在阳光下尝试了一切后,我的一位同事在网上发现了一个关于Oracle ODBC驱动程序中已知错误的文档 . 它建议使用Microsoft提供的Oracle驱动程序 .
我通过转到C:\ Windows \ SysWOW64 \ odbcad32.exe运行ODBC管理器,然后选择Microsoft Oracle ODBC来创建我的连接 . 然后,我使用新连接重新链接了我的Oracle表,并且能够使用以下代码更新表而没有任何问题:
这是关于该bug的文章的链接:
Error updating linked table
希望这将有助于其他遇到此问题的人 .