ODAC 使用中的2个问题

wf2091139 2009-05-19 03:02:53
因为项目开发需要第一次使用到ODAC控件,
系统使用TOraStoredProc访问oracle的2程序包中的过程,
//-------1
OraStoredProc1->Close();
OraStoredProc1->StoredProcName = "XXX1_PKG.GET_FILE_INFO";
OraStoredProc1->Params->Clear();
OraStoredProc1->Params->CreateParam(1,"ID",1);
......
OraStoredProc1->Params->CreateParam(ftCursor,"c_Cur",2);
OraStoredProc1->ParamByName("ID")->AsString = ConID;
......
OraStoredProc1->Prepare();
OraStoredProc1->Open();

//--------2
OraStoredProc1->Close();
OraStoredProc1->Params->Clear();
OraStoredProc1->StoredProcName = "XXX2_Pkg.Update_File_Info";
OraStoredProc1->Params->CreateParam(1,"ID",1);
......
OraStoredProc1->Prepare();
OraStoredProc1->ParamByName("ID")->AsString = ConID;
......
OraStoredProc1->ExecProc();

程序运行时是先执行1再执行2。(执行1的时候可能会被循环调用多次)

执行1的时候有时候会报错 : OCI is not inizialized.
通过断点跟踪往往是在第2次执行第一步的时候运行 OraStoredProc1->Open(); 时出上述错误。

另外一个错误提示大致是:EAssertionFailed with message 'Assertion failure(c:\program files\Borland\ODAC\Source\MemData.pas,line 6307)'
按错误描述的,6307行所在的函数如:
procedure TSharedObject.Free;
begin
if Assigned(Self) then begin
Assert(FRefCount > 0); //line 6307

if FRefCount = 1 then begin
if FGCHandle <> nil then
FreeGCHandle(FGCHandle);
inherited Free;
end
else
Dec(FRefCount);
end;
end;


上面提到的这2个问题不是每次运行都会出现。
ODAC版本 5.55.0.19 for C++ Builder 6
Oracle是10g的
...全文
201 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuihan20e 2009-05-20
  • 打赏
  • 举报
回复
安装ODAC应该就不需要安装客户端了吧,那ODAC我从来没有初成功过,所以我一般都是在那机器上安装了客户端,然后通过ADO来连接
wf2091139 2009-05-20
  • 打赏
  • 举报
回复
如果真的换版本就麻烦了,哎。
我不懂电脑 2009-05-20
  • 打赏
  • 举报
回复
建议使用新版本的odac她是oracle提供的组件,你可以找oracle的技术支持问问,从错误提示看应该是odac本身或网络不稳定导致的。
yangangs 2009-05-20
  • 打赏
  • 举报
回复
感觉像是版本低
laowang2 2009-05-20
  • 打赏
  • 举报
回复
没有安装客户端?
wf2091139 2009-05-20
  • 打赏
  • 举报
回复
就这么沉底。。。
wf2091139 2009-05-20
  • 打赏
  • 举报
回复
在妖哥网上找了个6.50.0.39的,先试试看好用不。

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧