首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

ODAC 使用中的2个有关问题

2012-02-02 
ODAC 使用中的2个问题因为项目开发需要第一次使用到ODAC控件,系统使用TOraStoredProc访问oracle的2程序包

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本身或网络不稳定导致的。

热点排行