用pro c写的一个集成访问数据库的动态库(属于16位版本)。访问Oracle8i以下的版本没问题,访问Oracle8i以上版本出错,请教是什么原因?

时间:2021-05-17 05:32:03
用pro c写的一个集成访问数据库的动态库(属于16位版本)。访问Oracle8i以下的版本没问题,访问Oracle8i以上版本出错,请教是什么原因?连接可以成功,取小字段的表和很少数据时可以成功,但取多数据时出错。是在调用sqlcxt((void far * far *)0, &sqlctx, &sqlstm, &sqlfpn);时出错。
以下是代码中的设置:
struct sqlexd sqlstm;

 sqlstm.sqlvsn = 8;
 sqlstm.arrsiz = 1;
 sqlstm.iters = (unsigned long  )fetch_size;
 sqlstm.offset = (unsigned short)2;
 sqlstm.cud = sqlcud0;
 sqlstm.sqlest = (unsigned char  *)&sqlca;
 sqlstm.sqlety = (unsigned short)0;
 sqlstm.sqhstv[0] = (unsigned char  *)dp;
 sqlstm.sqhstl[0] = (unsigned long  )0;
 sqlstm.sqindv[0] = (         short *)0;
 sqlstm.sqharm[0] = (unsigned long )0;
 sqlstm.sqphsv = sqlstm.sqhstv;
 sqlstm.sqphsl = sqlstm.sqhstl;
 sqlstm.sqpind = sqlstm.sqindv;
 sqlstm.sqparm = sqlstm.sqharm;
 sqlstm.sqparc = sqlstm.sqharc;
static const short sqlcud0[] =
{8,4130,
2,0,0,1,0,0,526,305,0,1,0,0,1,0,2,32,0,0,
20,0,0,1,0,0,527,331,0,0,0,0,1,0,
34,0,0,1,0,0,529,660,0,1,1,0,1,0,1,9,0,0,
52,0,0,1,0,0,523,667,0,1,1,0,1,0,1,32,0,0,
70,0,0,1,0,0,557,672,0,0,0,0,1,0,
84,0,0,1,0,0,532,683,0,1,0,0,1,0,2,32,0,0,
102,0,0,2,0,0,536,751,0,1,1,0,1,0,1,9,0,0,
120,0,0,3,0,0,529,758,0,1,1,0,1,0,1,9,0,0,
138,0,0,3,0,0,523,765,0,1,1,0,1,0,1,32,0,0,
156,0,0,3,0,0,527,769,0,0,0,0,1,0,
170,0,0,3,0,0,527,788,0,0,0,0,1,0,
184,0,0,4,0,0,539,1354,0,3,3,0,1,0,1,9,0,0,1,9,0,0,1,9,0,0,
210,0,0,5,0,0,542,1386,0,0,0,0,1,0,
224,0,0,6,0,0,543,1445,0,0,0,0,1,0,
};

5 个解决方案

#1


还有,oracle9i版本是否支持16位的客户端呢?请各位帮忙。万分感谢!!!

#2


有人遇到这种情况吗?麻烦帮下忙。谢谢!!!

#3


没这么干过,不过我个人认为,Pro*C/C++是为了开发方便而提供的预编译工具,很多东西需要预编译的时候翻译成C代码,当然如果能看懂可以自己翻译用它封装,但是不同版本的Oracle预编译时可能会有不同的做法,自己写的可能会有问题(不用oracle提供的预编译工具)。如果想要封装还是用OCI的好!

#4


proc 下要编译不同位数的程序需要包含不同的库。
因为你包含的库不对所以……

反正32位和64位是这样的
我做过这两种,你可以参考一下

#5


谢谢上面朋友的关注。
上面有个地方说错了,应该是访问9i以上版本出错。连接可以成功,访问很小的表(十个字段,60条数据可以成功)访问大表(30个字段,1000多条记录时出错)。

#1


还有,oracle9i版本是否支持16位的客户端呢?请各位帮忙。万分感谢!!!

#2


有人遇到这种情况吗?麻烦帮下忙。谢谢!!!

#3


没这么干过,不过我个人认为,Pro*C/C++是为了开发方便而提供的预编译工具,很多东西需要预编译的时候翻译成C代码,当然如果能看懂可以自己翻译用它封装,但是不同版本的Oracle预编译时可能会有不同的做法,自己写的可能会有问题(不用oracle提供的预编译工具)。如果想要封装还是用OCI的好!

#4


proc 下要编译不同位数的程序需要包含不同的库。
因为你包含的库不对所以……

反正32位和64位是这样的
我做过这两种,你可以参考一下

#5


谢谢上面朋友的关注。
上面有个地方说错了,应该是访问9i以上版本出错。连接可以成功,访问很小的表(十个字段,60条数据可以成功)访问大表(30个字段,1000多条记录时出错)。