wf2091139 2009年05月19日
ODAC 使用中的2个问题
因为项目开发需要第一次使用到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的
...全文
137 点赞 收藏 7
写回复
7 条回复

还没有回复,快来抢沙发~

发动态
发帖子
数据库及相关技术
创建于2007-08-02

707

社区成员

1.8w+

社区内容

C++ Builder 数据库及相关技术
社区公告
暂无公告