网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.关于内存参数的调整.
.RedHatLinux下Oracle启动脚本的建.
.ORACLE用户连接的管理.
.Windows安装Oracle出现错误.
.如何使用pipeline function获得实.
.自己整理的OCI文档,抛砖引玉.
.丢失归档日志文件后数据库应当如.
.linux之间如何进行串口通讯.
.ORACLE在HP-UX下的系列问题处理(.
.设置TOMCAT PATH,CLASSPATH变量.
.Oracle蠕虫再次变异.
.讲解Oracle show parameter命令的.
.NULL 使用详解.
.实现数据仓库的upsert.
.监听器已启动 没有监听器错误的解.
.Oracle 数据库集中复制方法逐步精.
.数据库复制技术在Internet上的实.
.当“菜鸟”遭遇Linux.
.Oracle 常用功能函数汇总.
.如何直接解压.tar.gz文件.

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

发表日期:2008-8-12


问题: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

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

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


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

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

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

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


附加注释:


可以看看$ORACLE_HOME\oci\samples下的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%\oci\include -I. -D_DLL -D_MT %1.cpp %1m.cpp %1o.cpp /link /LIBPATH:%ORACLE_HOME%\oci\lib\msvc oci.lib msvcrt.lib msvcprt.lib oraocci9.lib /nod:libc

goto end


:occimake

cl -GX -DWIN32COMMON -I. -I%ORACLE_HOME%\oci\include -I. -D_DLL -D_MT %1.cpp /link /LIBPATH:%ORACLE_HOME%\oci\lib\msvc 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是干嘛用的。

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

上一篇:揭开Oracle 10G手工创建数据库的神秘面纱 人气:1022
下一篇:讲解往表中顺序插入N条记录的简易方法 人气:776
浏览全部Oracle的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐