我有一个链接的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表时,是否有任何关于如何解决锁定违规的建议?有趣的是,它只发生在批处理模式下 - 如果我使用更新查询只更新一条记录,它会更新,没有错误或问题。
答案 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];
以下是关于该错误的文章的链接:
希望这可以帮助那些遇到过这个问题的人。