Oracle 9i中OCCI在VC6下不能DEBUG的问题

2016-02-19 16:46 8 1 收藏

今天图老师小编要跟大家分享Oracle 9i中OCCI在VC6下不能DEBUG的问题,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

【 tulaoshi.com - 编程语言 】

  问题:OCCI在VC6下不能debug:

  winXP VC6-sp6 oracle9.2

  是不是OCCI的库有 开发版和发行版 之分,所以用发行版的oraocci9.lib不能做debug版的程序,string或者vector在释放时总会报错

  Statement类的setXXX()函数为什么我在使用的时候不管用呢?

  文档说NUMBER类型也可以和string转换

  在

while(rs-next())
{
for(i=0; i{
cout
getString(i+1) 't';
}
cout }

  这个程序段中,为什么第一行中的NUMBE类型都正常的读出了,但是从第二行开始就不正确了呢

  如果我在while()前先next()几次,仍然是当前循环中的第一行的所有的number类型都正常读出,从第二行开始就又不正常了

  解决方法如下:

  vc6的那个默认的步骤debug肯定行不通。因为OCCI不按这种配置来compile.

  步骤如下:

  1. 确保oci.lib, oraocci9.lib在你的lib路径下边,确保oci/include在你的include路径下边

  2. 确保有下边的宏声明:(#define WIN32COMMON)

#ifdef WIN32COMMON
template
void getVector( ResultSet *rs, unsigned int index,
OCCI_STD_NAMESPACE::vector T &vect) ;
#else
template
void getVector( ResultSet *rs, unsigned int index,
OCCI_STD_NAMESPACE::vector T* &vect) ;
#endif

  3.这一步最重要,要与VC6的默认配置相区别:

  在project settings的WIN32 DEBUG的"link"下边,将Category: Input下边的

  Object/library modules:

  改为kernel32.lib user32.lib oci.lib msvcrt.lib msvcprt.lib oraocci9.lib (顺序不能错)

  同时,勾上Ignore all default libraries,

  并在Ignore libraries上边填上边libc.lib

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  这要build出来以来,执行是不会出现堆错误的。并且可以debug。

  使用occi与其它库进行集成时,尤其要注意这些配置,有的时候甚至出现不相容的情况。所以要根据实际情况进行选择。

  当然,你可以使用MTD, MD方式来build。

  到了VC7以后,OCCI相应的要求就少多了。

  linux下当初OCCI是有很多bug的,除非打了9205及以后的补丁,不然,你几乎无法正常使用。

  如果有再碰到类似问题,请及时回馈。

  附加注释:

  可以看看$ORACLE_HOMEocisamples下的make.bat中对应于OCCI的相关内容:

:occimakeobj
ott userid=scott/tiger intype=%1.typ outtype=%1out.type code=cpp hfile=%1h.h cppfile=%1o.cpp mapfile=%1m.cpp attraccess=private
cl -GX -DWIN32COMMON -I. -I%ORACLE_HOME%ociinclude -I. -D_DLL -D_MT %1.cpp %1m.cpp %1o.cpp /link /LIBPATH:%ORACLE_HOME%ocilibmsvc oci.lib msvcrt.lib msvcprt.lib oraocci9.lib /nod:libc
goto end
:occimake
cl -GX -DWIN32COMMON -I. -I%ORACLE_HOME%ociinclude -I. -D_DLL -D_MT %1.cpp /link /LIBPATH:%ORACLE_HOME%ocilibmsvc oci.lib msvcrt.lib msvcprt.lib oraocci9.lib /nod:libc
goto end

  至于为什么要/nod:libc,为什么要将msvcrt.lib msvcprt.lib 放到中间,那是因为oracle的occi库在build时依赖顺序不一样。你可以上msdn上查查msvcrt.lib和msvcprt.lib是干嘛用的。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  在侯捷的win32多线程编程里也有相关描述。

来源:https://www.tulaoshi.com/n/20160219/1613069.html

延伸阅读
数据方案对象 表7.1 Oracle 9i的数据方案对象 名称含义数据表表是用于存放用户数据的数据库对象。数据库中的表按照功能的不同可以分为系统表和用户表两类。系统表用于存储管理用户数据和数据库本身的数据,又称数据字典表;用户表用于存放用户的数据信息,默认建立的数据表就是用户表索引索引就犹如一本书的目录,利用它可以快速找到...
Oracle 9i默认的用户 表8.1 Oracle 9i默认的主要用户 用户名口令登录身份及说明syschange_on_installSYSDBA或SYSOPER,但不能以NORMAL登录,可作为默认的系统管理员systemManagerSYSDBA或NORMAL,但不能以SYSOPER登录,可作为默认的系统管理员scottTigerNORMAL,普通用户aqadmaqadmSYSDBA或NORMAL,高级队列管理员。DbsnmpdbsnmpSYSDB...
3.3.1 用户 1. 用户密码 用户默认的密码为manager。 2. 用户权限 用户具有SYSDBA权限,即数据库管理员权限,包括。 打开数据库服务器 关闭数据库服务器 备份数据库 恢复数据库 日志归档 会话限制 管理功能 创建数据库 3.3.2 用户 1. 用户密码 用户默认的密码为change_on_install。...
5.5.1 基于Web管理的原理 1. 客户机 客户机操作系统为Windows 2000、Windows 98或Windows NT,安装IE 5.0以上的浏览器,安装Java插件Oracle JInitiator 1.1.8.10和基于Applet技术的。 2. 中间层 安装和Apache HTTP服务器。 3. 数据库服务器 安装数据库服务器,运行。 5.5.2 如何构建基于Web管理的环...
约束条件就是Oracle数据库系统提供的对数据的完整性进行制约的机制。Oracle 9i允许创建5种约束条件。参见表7.8。 创建检查约束条件 (1)在中按照7.6节修改数据表结构的步骤进行操作。 (2)切换到图7.61所示的编辑表的选项卡。 (3)上述创建检查约束条件的SQL代码如下。 ――――――――――――――――...

经验教程

716

收藏

93
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部