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的
[解决办法]
感觉像是版本低
[解决办法]
建议使用新版本的odac她是oracle提供的组件,你可以找oracle的技术支持问问,从错误提示看应该是odac本身或网络不稳定导致的。