十万火急………… Delphi 访问 Oracle 的包(200分)

B

bigtt

Unregistered / Unconfirmed
GUEST, unregistred user!
[V][V][V][V][V][V][V][V][V][V][V][V][V]

正在和别人合作一个程序,对方使用 Oracle 包的方式提供存储过程给我们访问。

使用 BDE ,不能找到对方的存储过程,无法继续;
使用 ADO ,能找到对方的存储过程,但是对方的存储过程中无回滚操作可以,有后出现错误:
ORA-02074:无法在分布式事务处理中 ROLLBACK
ORA-06512:在"LDT.PKG_K_INTERFACE",line 65
ORA-02074:无法在分布式事务处理中 ROLLBACK
ORA-06512:在 line 1.

高手请帮帮忙,太急了……对方的方式肯定不会改,难道 Delphi 真的不能访问?(用 Sql Plus、Rapid SQL 等工具都可以运行)。
 
你有ADO For Oracle吗?
我正在找呢,能给个下载地址我吗?
 
从错误信息看,不是Delphi不能访问存储过程的问题了
而是你的存储过程中有事务回滚的语句,Oracle不支持在分布式事务中子Session中回滚
应该在Parent Session中执行事务操作。[:D]
 
使用BDE可以访问包,我一直在用,方法是用Tstoredproc控件,给StoredProcName属性
赋的值是“包名.存储过程名”,即:PACKAGE.STOREDPROC但一定要大写的。OK?
 
to:Konzi
>你有ADO For Oracle吗?
>我正在找呢,能给个下载地址我吗?

我用 Delphi 6 ,里面有,另外安装完成 Oracle 客户端也会加一个。


to:xianjun
>从错误信息看,不是Delphi不能访问存储过程的问题了
>而是你的存储过程中有事务回滚的语句,Oracle不支持在分布式事务中子Session中回滚
>应该在Parent Session中执行事务操作。

但是如果对方放在包外面,以普通存储过程方式给出可以用 BDE 访问,用 PB、VB 也访问正常。

to:zhch_liu
>使用BDE可以访问包,我一直在用,方法是用Tstoredproc控件,给StoredProcName属性
>赋的值是“包名.存储过程名”,即:PACKAGE.STOREDPROC但一定要大写的。OK?

不行, BDE 找不到。不是提示找不到就是非法操作。

干脆我把调用申明给出了:
GYLDJ.PKG_K_INTERFACE.PRC_K_YH101:)PRM_CARDNO,:pRM_PERSONNO,:pRM_ORGANNO,:pRM_PASSWORD,:pRM_APPCODE,:pRM_ERRORMSG,:pRM_NAME,:pRM_SEX,:pRM_IDENTITYNO,:pRM_BIRTHDAY,:pRM_PERSONKIND,:pRM_DEPNO,:pRM_DEPNAME,:pRM_ACCOUNTBALANCE);
用 Rapid SQL、PB、VB、ADO 传入正确方式(即不会引起对方存储过程内 rollback )都正常访问。
BDE ,找不到;ADO 传入错误(传入卡号、密码错误)就显示分布式错误。
 
多人接受答案了。
 
顶部