有兄弟用mingw编译过otl吗?无法正确获取数据库操作错误信息啊

iwong 2012-01-06 12:01:45
IDE用的Code::Blocks,编译环境TDM-GCC,算是mingw的一个分支版本吧,OTL已经更新到最新版本了

代码也是照着OTL文档写的,编译、链接都没问题

包含文件时,用了OTL_ORA10G_R2宏定义,如下:
#define OTL_ORA10G_R2
#include "otl/otlv4.h"

现在的问题是,rlogon失败后,抛出异常,但是 otl_exception::code 为0,otl_exception::msg 为空字符串,无法获取到错误信息

使用VC编译同样代码,otl_exception::code 实际为12154

在Code::Blocks里调试代码,发现是这里的问题:

 void rlogon(const char* connect_str,const int auto_commit=0)
{
throw_count=0;
retcode=connect_struct.rlogon(connect_str,auto_commit);
if(retcode)
connected=1;
else{
connected=0;
increment_throw_count();
if(get_throw_count()>1)return;
if(otl_uncaught_exception()) return;
OTL_TMPL_EXCEPTION ex(connect_struct);
connect_struct.cleanup();
throw ex;
}
}


OTL_TMPL_EXCEPTION ex(connect_struct);本应调用otl_tmpl_exception的构造函数:

 otl_tmpl_exception(TConnectStruct& conn_struct, const char* sqlstm=0)
#if defined(__GNUC__) && (__GNUC__>=3)
throw()
#else
OTL_NO_THROW
#endif
{
stm_text[0]=0;
var_info[0]=0;
if(sqlstm){
OTL_STRNCPY_S(OTL_RCAST(char*,stm_text),
sizeof(stm_text),
sqlstm,
sizeof(stm_text)-1);
stm_text[sizeof(stm_text)-1]=0;
}
conn_struct.error(OTL_SCAST(TExceptionStruct&,*this));
OTL_TRACE_EXCEPTION(this->code,this->msg,this->stm_text,this->var_info)
}


但是下断点,甚至放了个assert(0);在里面,都发现根本没进这个函数(VC下调试是进了该函数的)

于是修改otl这个头文件,加了个 void Copy(TConnectStruct& conn_struct, const char* sqlstm=0)函数

在OTL_TMPL_EXCEPTION ex(connect_struct);之后添加ex.Copy(connect_struct),终于执行相应代码了

结果结果…… conn_struct.error(OTL_SCAST(TExceptionStruct&,*this));这一句又进不去了!

茫然啊,如果在数据库操作失败时无法获得实际的错误码和错误描述的话,但这个代码根本就没实用价值。

求帮忙。。。
...全文
132 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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