是不是OCCI的库有 开发版和发行版 之分,所以用发行版的oraocci9.lib不能做debug版的程序,string或者vector在释放时总会报错
Statement类的setXXX()函数为什么我在使用的时候不管用呢?
文档说NUMBER类型也可以和string转换
在
while(rs->next())
{
for(i=0; i<colsize; i++)
{
cout <<rs->getString(i+1) <<'\t';
}
cout <<endl;
}
这个程序段中,为什么第一行中的NUMBE类型都正常的读出了,但是从第二行开始就不正确了呢
如果我在while()前先next()几次,仍然是当前循环中的第一行的所有的number类型都正常读出,从第二行开始就又不正常了
31 个解决方案
#1
UP
#2
自己顶一下
现在发现registerOutParameter也不管用啊
现在发现registerOutParameter也不管用啊
#3
呵呵,楼上的来的真快
#4
顶起来
#5
是不是都遇到过这种问题啊
我快放弃它了,JAVA中用着那么顺,咋一到C++就成这样了呢
不过我想oracle这种公司总不会出这种垃圾东西吧,估计还是自己的问题
我快放弃它了,JAVA中用着那么顺,咋一到C++就成这样了呢
不过我想oracle这种公司总不会出这种垃圾东西吧,估计还是自己的问题
#6
我是没有通过OCCI的,使用Oracle库连接的,非常的清楚,控制很方便,和写SQL一样
//这些代码是抄的,但平时我写的是差不多一个格式的,楼主看看
EXEC SQL BEGIN DECLARE SECTION;
char hv_name[100];
EXEC SQL END DECLARE SECTION;
EXEC SQL CREATE PROCEDURE female_employees()
RESULT( name char(50) )
BEGIN
SELECT emp_fname || emp_lname FROM employee
WHERE sex = 'f';
END;
EXEC SQL PREPARE S1 FROM 'CALL female_employees()';
EXEC SQL DECLARE C1 CURSOR FOR S1;
EXEC SQL OPEN C1;
for(;;) {
EXEC SQL FETCH C1 INTO :hv_name;
if( SQLCODE != SQLE_NOERROR ) break;
printf( "%s\\n", hv_name );
}
EXEC SQL CLOSE C1;
//这些代码是抄的,但平时我写的是差不多一个格式的,楼主看看
EXEC SQL BEGIN DECLARE SECTION;
char hv_name[100];
EXEC SQL END DECLARE SECTION;
EXEC SQL CREATE PROCEDURE female_employees()
RESULT( name char(50) )
BEGIN
SELECT emp_fname || emp_lname FROM employee
WHERE sex = 'f';
END;
EXEC SQL PREPARE S1 FROM 'CALL female_employees()';
EXEC SQL DECLARE C1 CURSOR FOR S1;
EXEC SQL OPEN C1;
for(;;) {
EXEC SQL FETCH C1 INTO :hv_name;
if( SQLCODE != SQLE_NOERROR ) break;
printf( "%s\\n", hv_name );
}
EXEC SQL CLOSE C1;
#7
//有参数时的操作
EXEC SQL BEGIN DECLARE SECTION;
char hv_name[100];
char hv_TT[10];
EXEC SQL END DECLARE SECTION;
sprintf(hv_TT,"...");
EXEC SQL CREATE PROCEDURE female_employees(:hv_TT)
RESULT( name char(50) )
BEGIN
SELECT emp_fname || emp_lname FROM employee
WHERE sex = 'f';
END;
EXEC SQL PREPARE S1 FROM 'CALL female_employees()';
EXEC SQL DECLARE C1 CURSOR FOR S1;
EXEC SQL OPEN C1;
for(;;) {
EXEC SQL FETCH C1 INTO :hv_name;
if( SQLCODE != SQLE_NOERROR ) break;
printf( "%s\\n", hv_name );
}
EXEC SQL CLOSE C1;
EXEC SQL BEGIN DECLARE SECTION;
char hv_name[100];
char hv_TT[10];
EXEC SQL END DECLARE SECTION;
sprintf(hv_TT,"...");
EXEC SQL CREATE PROCEDURE female_employees(:hv_TT)
RESULT( name char(50) )
BEGIN
SELECT emp_fname || emp_lname FROM employee
WHERE sex = 'f';
END;
EXEC SQL PREPARE S1 FROM 'CALL female_employees()';
EXEC SQL DECLARE C1 CURSOR FOR S1;
EXEC SQL OPEN C1;
for(;;) {
EXEC SQL FETCH C1 INTO :hv_name;
if( SQLCODE != SQLE_NOERROR ) break;
printf( "%s\\n", hv_name );
}
EXEC SQL CLOSE C1;
#8
上面打错了
有参数时的操作是这样的
//我自己的程序
int CDBControl::CheckNote(int& status)
{
ConnectDB(szUser, szPwd, szServer);
EXEC SQL BEGIN DECLARE SECTION;
int statu;
EXEC SQL END DECLARE SECTION;
EXEC SQL CALL cp_atm_run_statu_smi_deal(:statu);
if(sqlca.sqlcode)
{
status = statu;
EXEC SQL ROLLBACK WORK RELEASE;
throw CError(sqlca.sqlerrm.sqlerrmc, ERR_NOTE_CHECK, errno, 'D', 'M');
}
EXEC SQL COMMIT WORK RELEASE;
status = statu;
return SUCCESS;
}
有参数时的操作是这样的
//我自己的程序
int CDBControl::CheckNote(int& status)
{
ConnectDB(szUser, szPwd, szServer);
EXEC SQL BEGIN DECLARE SECTION;
int statu;
EXEC SQL END DECLARE SECTION;
EXEC SQL CALL cp_atm_run_statu_smi_deal(:statu);
if(sqlca.sqlcode)
{
status = statu;
EXEC SQL ROLLBACK WORK RELEASE;
throw CError(sqlca.sqlerrm.sqlerrmc, ERR_NOTE_CHECK, errno, 'D', 'M');
}
EXEC SQL COMMIT WORK RELEASE;
status = statu;
return SUCCESS;
}
#9
汗啊,这些东西看起来不复杂
UPCC(杂食动物),不过得让您给扫扫盲了,该怎么用呢,C++的东西吗?
我想用VC(或者其它的什么什么C,反正用C/C++)做一个客户端的程序来访问oracle
按照网上流传的方式设置了VC,但debug运行后还是有问题,
最终我得出一个结论:(不知道对不对啊,希望对大家有点帮助)
oracle分为开发版和发行版,发行版的oraocciX.dll不能用在debug下。(据说开发版的dll为oraocciXd.dll,不过我还没有找到)
反正最终是在release下运行通过了,表,列,数据也都取出来,可就是还有些问题
一个就是Statement的参数绑定(不论输出输入)无效
一个就是对NUMBER类型的处理
恶心啊,我的第一次oracle之旅
UPCC(杂食动物),不过得让您给扫扫盲了,该怎么用呢,C++的东西吗?
我想用VC(或者其它的什么什么C,反正用C/C++)做一个客户端的程序来访问oracle
按照网上流传的方式设置了VC,但debug运行后还是有问题,
最终我得出一个结论:(不知道对不对啊,希望对大家有点帮助)
oracle分为开发版和发行版,发行版的oraocciX.dll不能用在debug下。(据说开发版的dll为oraocciXd.dll,不过我还没有找到)
反正最终是在release下运行通过了,表,列,数据也都取出来,可就是还有些问题
一个就是Statement的参数绑定(不论输出输入)无效
一个就是对NUMBER类型的处理
恶心啊,我的第一次oracle之旅
#10
EXEC SQL END DECLARE SECTION;像这种句子在C++中能通过吗?
#11
这看起来像是C++的代码,那些EXE之间的东西是宏定义出来的东西吗
要怎么用啊
要怎么用啊
#12
to yifanernei(f)
这些东西是Pro*c的语法,你google一下Pro*c就知道了。
而且Pro*c是一个代码转换的编译起,你写的
“EXEC SQL END DECLARE SECTION;像这种句子在C++中能通过吗?”
通过Pro*c的转换后就成了C/C++可编译的语法了,比如
int CDBControl::CheckNote(int& status)
{
ConnectDB(szUser, szPwd, szServer);
EXEC SQL BEGIN DECLARE SECTION;
int statu;
EXEC SQL END DECLARE SECTION;
EXEC SQL CALL cp_atm_run_statu_smi_deal(:statu);
if(sqlca.sqlcode)
{
status = statu;
EXEC SQL ROLLBACK WORK RELEASE;
throw CError(sqlca.sqlerrm.sqlerrmc, ERR_NOTE_CHECK, errno, 'D', 'M');
}
EXEC SQL COMMIT WORK RELEASE;
status = statu;
return SUCCESS;
}
这里通过Pro*c的转换后就成了
int CDBControl::CheckNote(int& status)
{
ConnectDB(szUser, szPwd, szServer);
/* EXEC SQL BEGIN DECLARE SECTION; */
int statu;
/* EXEC SQL END DECLARE SECTION; */
/* EXEC SQL CALL cp_atm_run_statu_smi_deal(:statu); */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 28;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "call cp_atm_run_statu_smi_deal(:b0)";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )424;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)&statu;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
if(sqlca.sqlcode)
{
status = statu;
/* EXEC SQL ROLLBACK WORK RELEASE; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 28;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )443;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
throw CError(sqlca.sqlerrm.sqlerrmc, ERR_NOTE_CHECK, errno, 'D', 'M');
}
/* EXEC SQL COMMIT WORK RELEASE; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 28;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )458;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
status = statu;
return SUCCESS;
}
//struct sqlexd sqlstm;是oracle的库文件结构,必须包含的头文件是
EXEC SQL INCLUDE SQLCA;
EXEC SQL INCLUDE ORACA;
这些东西是Pro*c的语法,你google一下Pro*c就知道了。
而且Pro*c是一个代码转换的编译起,你写的
“EXEC SQL END DECLARE SECTION;像这种句子在C++中能通过吗?”
通过Pro*c的转换后就成了C/C++可编译的语法了,比如
int CDBControl::CheckNote(int& status)
{
ConnectDB(szUser, szPwd, szServer);
EXEC SQL BEGIN DECLARE SECTION;
int statu;
EXEC SQL END DECLARE SECTION;
EXEC SQL CALL cp_atm_run_statu_smi_deal(:statu);
if(sqlca.sqlcode)
{
status = statu;
EXEC SQL ROLLBACK WORK RELEASE;
throw CError(sqlca.sqlerrm.sqlerrmc, ERR_NOTE_CHECK, errno, 'D', 'M');
}
EXEC SQL COMMIT WORK RELEASE;
status = statu;
return SUCCESS;
}
这里通过Pro*c的转换后就成了
int CDBControl::CheckNote(int& status)
{
ConnectDB(szUser, szPwd, szServer);
/* EXEC SQL BEGIN DECLARE SECTION; */
int statu;
/* EXEC SQL END DECLARE SECTION; */
/* EXEC SQL CALL cp_atm_run_statu_smi_deal(:statu); */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 28;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "call cp_atm_run_statu_smi_deal(:b0)";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )424;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)&statu;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
if(sqlca.sqlcode)
{
status = statu;
/* EXEC SQL ROLLBACK WORK RELEASE; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 28;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )443;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
throw CError(sqlca.sqlerrm.sqlerrmc, ERR_NOTE_CHECK, errno, 'D', 'M');
}
/* EXEC SQL COMMIT WORK RELEASE; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 28;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )458;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
status = statu;
return SUCCESS;
}
//struct sqlexd sqlstm;是oracle的库文件结构,必须包含的头文件是
EXEC SQL INCLUDE SQLCA;
EXEC SQL INCLUDE ORACA;
#13
好的,这是个方法,我学习一下去
帅哥,你是星级高手了,有没有认识人中对OCCI特别有感觉啊
毕竟OCCI是C++的调用接口,学不会总觉得心中不爽啊
帅哥,你是星级高手了,有没有认识人中对OCCI特别有感觉啊
毕竟OCCI是C++的调用接口,学不会总觉得心中不爽啊
#14
还是不行吗,再顶一下
或者哪位大哥给推荐一本讲OCCI的书也行啊,书我也没有找到呢
或者哪位大哥给推荐一本讲OCCI的书也行啊,书我也没有找到呢
#15
CSDN上没有人用OCCI吗?还是OCCI和商业相关,不能透露啊
#16
顶有分
#17
顶有分,顶分不够也能加,可是现在连顶都没有人顶了
#18
现在的人真是浮躁的,java的代码想往C++里放就想运行!
#19
呵呵,这位liu584兄,说的是俺吗?不是俺放的啊OCCI的示例代码也是这样做的,但也不行啊
要不您给来点思路?
要不您给来点思路?
#20
看不明白啊
#21
qinxiaofei(路漫漫)兄,什么看不明白,讲
#22
已经在最新的帖子里回答了你的问题。我就等着接分吧。Good luck.
在三年以前我曾经使用OCCI开发过一些底层应用,其基本的解决方法如下:
vc6的那个默认的步骤debug肯定行不通。因为OCCI不按这种配置来compile.
步骤如下:
1. 确保oci.lib, oraocci9.lib在你的lib路径下边,确保oci/include在你的include路径下边
2. 确保有下边的宏声明:(#define WIN32COMMON)
#ifdef WIN32COMMON
template <class T>
void getVector( ResultSet *rs, unsigned int index,
OCCI_STD_NAMESPACE::vector< T > &vect) ;
#else
template <class T>
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与其它库进行集成时,尤其要注意这些配置,有的时候甚至出现不相容的情况。所以要根据实际情况进行选择。
当然,你可以使用MDD, MD方式来build。
到了VC7以后,OCCI相应的要求就少多了。
linux下当初OCCI是有很多bug的,除非打了9205及以后的补丁,不然,你几乎无法正常使用。
如果有再碰到类似问题,请及时回馈。
你的这个帖子我也将其帖到我的blog上去了。http://blog.csdn.net/iihero
在三年以前我曾经使用OCCI开发过一些底层应用,其基本的解决方法如下:
vc6的那个默认的步骤debug肯定行不通。因为OCCI不按这种配置来compile.
步骤如下:
1. 确保oci.lib, oraocci9.lib在你的lib路径下边,确保oci/include在你的include路径下边
2. 确保有下边的宏声明:(#define WIN32COMMON)
#ifdef WIN32COMMON
template <class T>
void getVector( ResultSet *rs, unsigned int index,
OCCI_STD_NAMESPACE::vector< T > &vect) ;
#else
template <class T>
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与其它库进行集成时,尤其要注意这些配置,有的时候甚至出现不相容的情况。所以要根据实际情况进行选择。
当然,你可以使用MDD, MD方式来build。
到了VC7以后,OCCI相应的要求就少多了。
linux下当初OCCI是有很多bug的,除非打了9205及以后的补丁,不然,你几乎无法正常使用。
如果有再碰到类似问题,请及时回馈。
你的这个帖子我也将其帖到我的blog上去了。http://blog.csdn.net/iihero
#23
帮lz顶一个
#24
up
#25
呵呵,有经验的现身了,我这就去试一下
#26
果然有效,这样一来,也能debug也,也可以用getString了
并且Long类型也不用单独处理了,大家等着JF吧,
iihero兄,我们还是另开贴送分吧,眼看这么多同仁帮着顶,分给少了不好意思,等我的信儿啊
当然了,还有一些问题,希望五禽戏人帮助解答一下
NUMBER类型应该如何处理呢?
我想把它们处理成字符串,直接用getString还是不行啊,总是调用getString的这一行数据有效,
从它下面的一行开始,所有的NUBER类型用getString都会得到一个很大的负数。而用getNumber得到一个Number类型的对象,它没有直接转换成字符串的函数,而toText函数又要一个格式化字符串作为参数,这样就需要再取得该列的精度来对Number(10, 0), Number(10, 2) 或者 Number类型进行不同的处理,有没有其它的办法处理啊
我用MetaData类取得列的数据类型时,为什么得不到float类型的数据,float类型值为4,但所有的float类型返回的都为2,即为NUMBER类型
我发现用setXXX函数可以对sql修改,但是修改结果只在执行时才体现出来,用getSQL看不到修改后的结果。但有一点,我在select * from :1 语句中对表名setString就无效,在update :1 set .... 这种语句中也无效,也就是说对表名的参数赋值不管用,这是真的吗?
registerOutParam函数为什么总返回一个ora-32109的错误呢
并且Long类型也不用单独处理了,大家等着JF吧,
iihero兄,我们还是另开贴送分吧,眼看这么多同仁帮着顶,分给少了不好意思,等我的信儿啊
当然了,还有一些问题,希望五禽戏人帮助解答一下
NUMBER类型应该如何处理呢?
我想把它们处理成字符串,直接用getString还是不行啊,总是调用getString的这一行数据有效,
从它下面的一行开始,所有的NUBER类型用getString都会得到一个很大的负数。而用getNumber得到一个Number类型的对象,它没有直接转换成字符串的函数,而toText函数又要一个格式化字符串作为参数,这样就需要再取得该列的精度来对Number(10, 0), Number(10, 2) 或者 Number类型进行不同的处理,有没有其它的办法处理啊
我用MetaData类取得列的数据类型时,为什么得不到float类型的数据,float类型值为4,但所有的float类型返回的都为2,即为NUMBER类型
我发现用setXXX函数可以对sql修改,但是修改结果只在执行时才体现出来,用getSQL看不到修改后的结果。但有一点,我在select * from :1 语句中对表名setString就无效,在update :1 set .... 这种语句中也无效,也就是说对表名的参数赋值不管用,这是真的吗?
registerOutParam函数为什么总返回一个ora-32109的错误呢
#27
不好意思啊,上面打错字了,是希望大家帮助解答一下,真不知道为什么会出来个“五禽戏人”
呵呵
呵呵
#28
number只是数值类型的统称,你得根据实际情况,可以getInt, getFloat, getDouble等等
根据datatype的precision和scale可以判断得到。
select * from :1是无效的动态语句。动态绑定是指绑定字段变量的值,不要混淆,它不是指对表名的绑定。
registerOutParam如果使用合适,应该不会有错。
Good Luck.
根据datatype的precision和scale可以判断得到。
select * from :1是无效的动态语句。动态绑定是指绑定字段变量的值,不要混淆,它不是指对表名的绑定。
registerOutParam如果使用合适,应该不会有错。
Good Luck.
#29
帅哥,你好像常在啊,不介意的话加我QQ吧
55659592
55659592
#30
如果介意的话请明示,俺还等着呢
可是为什么还有要OCCIFLOAT这种类型呢?示例程序上也有判断,如果该字段为float就打印出“FLOAT”呢。
可是为什么还有要OCCIFLOAT这种类型呢?示例程序上也有判断,如果该字段为float就打印出“FLOAT”呢。
#31
我编译过OCCI
可惜散分了
可惜散分了
#1
UP
#2
自己顶一下
现在发现registerOutParameter也不管用啊
现在发现registerOutParameter也不管用啊
#3
呵呵,楼上的来的真快
#4
顶起来
#5
是不是都遇到过这种问题啊
我快放弃它了,JAVA中用着那么顺,咋一到C++就成这样了呢
不过我想oracle这种公司总不会出这种垃圾东西吧,估计还是自己的问题
我快放弃它了,JAVA中用着那么顺,咋一到C++就成这样了呢
不过我想oracle这种公司总不会出这种垃圾东西吧,估计还是自己的问题
#6
我是没有通过OCCI的,使用Oracle库连接的,非常的清楚,控制很方便,和写SQL一样
//这些代码是抄的,但平时我写的是差不多一个格式的,楼主看看
EXEC SQL BEGIN DECLARE SECTION;
char hv_name[100];
EXEC SQL END DECLARE SECTION;
EXEC SQL CREATE PROCEDURE female_employees()
RESULT( name char(50) )
BEGIN
SELECT emp_fname || emp_lname FROM employee
WHERE sex = 'f';
END;
EXEC SQL PREPARE S1 FROM 'CALL female_employees()';
EXEC SQL DECLARE C1 CURSOR FOR S1;
EXEC SQL OPEN C1;
for(;;) {
EXEC SQL FETCH C1 INTO :hv_name;
if( SQLCODE != SQLE_NOERROR ) break;
printf( "%s\\n", hv_name );
}
EXEC SQL CLOSE C1;
//这些代码是抄的,但平时我写的是差不多一个格式的,楼主看看
EXEC SQL BEGIN DECLARE SECTION;
char hv_name[100];
EXEC SQL END DECLARE SECTION;
EXEC SQL CREATE PROCEDURE female_employees()
RESULT( name char(50) )
BEGIN
SELECT emp_fname || emp_lname FROM employee
WHERE sex = 'f';
END;
EXEC SQL PREPARE S1 FROM 'CALL female_employees()';
EXEC SQL DECLARE C1 CURSOR FOR S1;
EXEC SQL OPEN C1;
for(;;) {
EXEC SQL FETCH C1 INTO :hv_name;
if( SQLCODE != SQLE_NOERROR ) break;
printf( "%s\\n", hv_name );
}
EXEC SQL CLOSE C1;
#7
//有参数时的操作
EXEC SQL BEGIN DECLARE SECTION;
char hv_name[100];
char hv_TT[10];
EXEC SQL END DECLARE SECTION;
sprintf(hv_TT,"...");
EXEC SQL CREATE PROCEDURE female_employees(:hv_TT)
RESULT( name char(50) )
BEGIN
SELECT emp_fname || emp_lname FROM employee
WHERE sex = 'f';
END;
EXEC SQL PREPARE S1 FROM 'CALL female_employees()';
EXEC SQL DECLARE C1 CURSOR FOR S1;
EXEC SQL OPEN C1;
for(;;) {
EXEC SQL FETCH C1 INTO :hv_name;
if( SQLCODE != SQLE_NOERROR ) break;
printf( "%s\\n", hv_name );
}
EXEC SQL CLOSE C1;
EXEC SQL BEGIN DECLARE SECTION;
char hv_name[100];
char hv_TT[10];
EXEC SQL END DECLARE SECTION;
sprintf(hv_TT,"...");
EXEC SQL CREATE PROCEDURE female_employees(:hv_TT)
RESULT( name char(50) )
BEGIN
SELECT emp_fname || emp_lname FROM employee
WHERE sex = 'f';
END;
EXEC SQL PREPARE S1 FROM 'CALL female_employees()';
EXEC SQL DECLARE C1 CURSOR FOR S1;
EXEC SQL OPEN C1;
for(;;) {
EXEC SQL FETCH C1 INTO :hv_name;
if( SQLCODE != SQLE_NOERROR ) break;
printf( "%s\\n", hv_name );
}
EXEC SQL CLOSE C1;
#8
上面打错了
有参数时的操作是这样的
//我自己的程序
int CDBControl::CheckNote(int& status)
{
ConnectDB(szUser, szPwd, szServer);
EXEC SQL BEGIN DECLARE SECTION;
int statu;
EXEC SQL END DECLARE SECTION;
EXEC SQL CALL cp_atm_run_statu_smi_deal(:statu);
if(sqlca.sqlcode)
{
status = statu;
EXEC SQL ROLLBACK WORK RELEASE;
throw CError(sqlca.sqlerrm.sqlerrmc, ERR_NOTE_CHECK, errno, 'D', 'M');
}
EXEC SQL COMMIT WORK RELEASE;
status = statu;
return SUCCESS;
}
有参数时的操作是这样的
//我自己的程序
int CDBControl::CheckNote(int& status)
{
ConnectDB(szUser, szPwd, szServer);
EXEC SQL BEGIN DECLARE SECTION;
int statu;
EXEC SQL END DECLARE SECTION;
EXEC SQL CALL cp_atm_run_statu_smi_deal(:statu);
if(sqlca.sqlcode)
{
status = statu;
EXEC SQL ROLLBACK WORK RELEASE;
throw CError(sqlca.sqlerrm.sqlerrmc, ERR_NOTE_CHECK, errno, 'D', 'M');
}
EXEC SQL COMMIT WORK RELEASE;
status = statu;
return SUCCESS;
}
#9
汗啊,这些东西看起来不复杂
UPCC(杂食动物),不过得让您给扫扫盲了,该怎么用呢,C++的东西吗?
我想用VC(或者其它的什么什么C,反正用C/C++)做一个客户端的程序来访问oracle
按照网上流传的方式设置了VC,但debug运行后还是有问题,
最终我得出一个结论:(不知道对不对啊,希望对大家有点帮助)
oracle分为开发版和发行版,发行版的oraocciX.dll不能用在debug下。(据说开发版的dll为oraocciXd.dll,不过我还没有找到)
反正最终是在release下运行通过了,表,列,数据也都取出来,可就是还有些问题
一个就是Statement的参数绑定(不论输出输入)无效
一个就是对NUMBER类型的处理
恶心啊,我的第一次oracle之旅
UPCC(杂食动物),不过得让您给扫扫盲了,该怎么用呢,C++的东西吗?
我想用VC(或者其它的什么什么C,反正用C/C++)做一个客户端的程序来访问oracle
按照网上流传的方式设置了VC,但debug运行后还是有问题,
最终我得出一个结论:(不知道对不对啊,希望对大家有点帮助)
oracle分为开发版和发行版,发行版的oraocciX.dll不能用在debug下。(据说开发版的dll为oraocciXd.dll,不过我还没有找到)
反正最终是在release下运行通过了,表,列,数据也都取出来,可就是还有些问题
一个就是Statement的参数绑定(不论输出输入)无效
一个就是对NUMBER类型的处理
恶心啊,我的第一次oracle之旅
#10
EXEC SQL END DECLARE SECTION;像这种句子在C++中能通过吗?
#11
这看起来像是C++的代码,那些EXE之间的东西是宏定义出来的东西吗
要怎么用啊
要怎么用啊
#12
to yifanernei(f)
这些东西是Pro*c的语法,你google一下Pro*c就知道了。
而且Pro*c是一个代码转换的编译起,你写的
“EXEC SQL END DECLARE SECTION;像这种句子在C++中能通过吗?”
通过Pro*c的转换后就成了C/C++可编译的语法了,比如
int CDBControl::CheckNote(int& status)
{
ConnectDB(szUser, szPwd, szServer);
EXEC SQL BEGIN DECLARE SECTION;
int statu;
EXEC SQL END DECLARE SECTION;
EXEC SQL CALL cp_atm_run_statu_smi_deal(:statu);
if(sqlca.sqlcode)
{
status = statu;
EXEC SQL ROLLBACK WORK RELEASE;
throw CError(sqlca.sqlerrm.sqlerrmc, ERR_NOTE_CHECK, errno, 'D', 'M');
}
EXEC SQL COMMIT WORK RELEASE;
status = statu;
return SUCCESS;
}
这里通过Pro*c的转换后就成了
int CDBControl::CheckNote(int& status)
{
ConnectDB(szUser, szPwd, szServer);
/* EXEC SQL BEGIN DECLARE SECTION; */
int statu;
/* EXEC SQL END DECLARE SECTION; */
/* EXEC SQL CALL cp_atm_run_statu_smi_deal(:statu); */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 28;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "call cp_atm_run_statu_smi_deal(:b0)";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )424;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)&statu;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
if(sqlca.sqlcode)
{
status = statu;
/* EXEC SQL ROLLBACK WORK RELEASE; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 28;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )443;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
throw CError(sqlca.sqlerrm.sqlerrmc, ERR_NOTE_CHECK, errno, 'D', 'M');
}
/* EXEC SQL COMMIT WORK RELEASE; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 28;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )458;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
status = statu;
return SUCCESS;
}
//struct sqlexd sqlstm;是oracle的库文件结构,必须包含的头文件是
EXEC SQL INCLUDE SQLCA;
EXEC SQL INCLUDE ORACA;
这些东西是Pro*c的语法,你google一下Pro*c就知道了。
而且Pro*c是一个代码转换的编译起,你写的
“EXEC SQL END DECLARE SECTION;像这种句子在C++中能通过吗?”
通过Pro*c的转换后就成了C/C++可编译的语法了,比如
int CDBControl::CheckNote(int& status)
{
ConnectDB(szUser, szPwd, szServer);
EXEC SQL BEGIN DECLARE SECTION;
int statu;
EXEC SQL END DECLARE SECTION;
EXEC SQL CALL cp_atm_run_statu_smi_deal(:statu);
if(sqlca.sqlcode)
{
status = statu;
EXEC SQL ROLLBACK WORK RELEASE;
throw CError(sqlca.sqlerrm.sqlerrmc, ERR_NOTE_CHECK, errno, 'D', 'M');
}
EXEC SQL COMMIT WORK RELEASE;
status = statu;
return SUCCESS;
}
这里通过Pro*c的转换后就成了
int CDBControl::CheckNote(int& status)
{
ConnectDB(szUser, szPwd, szServer);
/* EXEC SQL BEGIN DECLARE SECTION; */
int statu;
/* EXEC SQL END DECLARE SECTION; */
/* EXEC SQL CALL cp_atm_run_statu_smi_deal(:statu); */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 28;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "call cp_atm_run_statu_smi_deal(:b0)";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )424;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)&statu;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
if(sqlca.sqlcode)
{
status = statu;
/* EXEC SQL ROLLBACK WORK RELEASE; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 28;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )443;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
throw CError(sqlca.sqlerrm.sqlerrmc, ERR_NOTE_CHECK, errno, 'D', 'M');
}
/* EXEC SQL COMMIT WORK RELEASE; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 28;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )458;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
status = statu;
return SUCCESS;
}
//struct sqlexd sqlstm;是oracle的库文件结构,必须包含的头文件是
EXEC SQL INCLUDE SQLCA;
EXEC SQL INCLUDE ORACA;
#13
好的,这是个方法,我学习一下去
帅哥,你是星级高手了,有没有认识人中对OCCI特别有感觉啊
毕竟OCCI是C++的调用接口,学不会总觉得心中不爽啊
帅哥,你是星级高手了,有没有认识人中对OCCI特别有感觉啊
毕竟OCCI是C++的调用接口,学不会总觉得心中不爽啊
#14
还是不行吗,再顶一下
或者哪位大哥给推荐一本讲OCCI的书也行啊,书我也没有找到呢
或者哪位大哥给推荐一本讲OCCI的书也行啊,书我也没有找到呢
#15
CSDN上没有人用OCCI吗?还是OCCI和商业相关,不能透露啊
#16
顶有分
#17
顶有分,顶分不够也能加,可是现在连顶都没有人顶了
#18
现在的人真是浮躁的,java的代码想往C++里放就想运行!
#19
呵呵,这位liu584兄,说的是俺吗?不是俺放的啊OCCI的示例代码也是这样做的,但也不行啊
要不您给来点思路?
要不您给来点思路?
#20
看不明白啊
#21
qinxiaofei(路漫漫)兄,什么看不明白,讲
#22
已经在最新的帖子里回答了你的问题。我就等着接分吧。Good luck.
在三年以前我曾经使用OCCI开发过一些底层应用,其基本的解决方法如下:
vc6的那个默认的步骤debug肯定行不通。因为OCCI不按这种配置来compile.
步骤如下:
1. 确保oci.lib, oraocci9.lib在你的lib路径下边,确保oci/include在你的include路径下边
2. 确保有下边的宏声明:(#define WIN32COMMON)
#ifdef WIN32COMMON
template <class T>
void getVector( ResultSet *rs, unsigned int index,
OCCI_STD_NAMESPACE::vector< T > &vect) ;
#else
template <class T>
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与其它库进行集成时,尤其要注意这些配置,有的时候甚至出现不相容的情况。所以要根据实际情况进行选择。
当然,你可以使用MDD, MD方式来build。
到了VC7以后,OCCI相应的要求就少多了。
linux下当初OCCI是有很多bug的,除非打了9205及以后的补丁,不然,你几乎无法正常使用。
如果有再碰到类似问题,请及时回馈。
你的这个帖子我也将其帖到我的blog上去了。http://blog.csdn.net/iihero
在三年以前我曾经使用OCCI开发过一些底层应用,其基本的解决方法如下:
vc6的那个默认的步骤debug肯定行不通。因为OCCI不按这种配置来compile.
步骤如下:
1. 确保oci.lib, oraocci9.lib在你的lib路径下边,确保oci/include在你的include路径下边
2. 确保有下边的宏声明:(#define WIN32COMMON)
#ifdef WIN32COMMON
template <class T>
void getVector( ResultSet *rs, unsigned int index,
OCCI_STD_NAMESPACE::vector< T > &vect) ;
#else
template <class T>
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与其它库进行集成时,尤其要注意这些配置,有的时候甚至出现不相容的情况。所以要根据实际情况进行选择。
当然,你可以使用MDD, MD方式来build。
到了VC7以后,OCCI相应的要求就少多了。
linux下当初OCCI是有很多bug的,除非打了9205及以后的补丁,不然,你几乎无法正常使用。
如果有再碰到类似问题,请及时回馈。
你的这个帖子我也将其帖到我的blog上去了。http://blog.csdn.net/iihero
#23
帮lz顶一个
#24
up
#25
呵呵,有经验的现身了,我这就去试一下
#26
果然有效,这样一来,也能debug也,也可以用getString了
并且Long类型也不用单独处理了,大家等着JF吧,
iihero兄,我们还是另开贴送分吧,眼看这么多同仁帮着顶,分给少了不好意思,等我的信儿啊
当然了,还有一些问题,希望五禽戏人帮助解答一下
NUMBER类型应该如何处理呢?
我想把它们处理成字符串,直接用getString还是不行啊,总是调用getString的这一行数据有效,
从它下面的一行开始,所有的NUBER类型用getString都会得到一个很大的负数。而用getNumber得到一个Number类型的对象,它没有直接转换成字符串的函数,而toText函数又要一个格式化字符串作为参数,这样就需要再取得该列的精度来对Number(10, 0), Number(10, 2) 或者 Number类型进行不同的处理,有没有其它的办法处理啊
我用MetaData类取得列的数据类型时,为什么得不到float类型的数据,float类型值为4,但所有的float类型返回的都为2,即为NUMBER类型
我发现用setXXX函数可以对sql修改,但是修改结果只在执行时才体现出来,用getSQL看不到修改后的结果。但有一点,我在select * from :1 语句中对表名setString就无效,在update :1 set .... 这种语句中也无效,也就是说对表名的参数赋值不管用,这是真的吗?
registerOutParam函数为什么总返回一个ora-32109的错误呢
并且Long类型也不用单独处理了,大家等着JF吧,
iihero兄,我们还是另开贴送分吧,眼看这么多同仁帮着顶,分给少了不好意思,等我的信儿啊
当然了,还有一些问题,希望五禽戏人帮助解答一下
NUMBER类型应该如何处理呢?
我想把它们处理成字符串,直接用getString还是不行啊,总是调用getString的这一行数据有效,
从它下面的一行开始,所有的NUBER类型用getString都会得到一个很大的负数。而用getNumber得到一个Number类型的对象,它没有直接转换成字符串的函数,而toText函数又要一个格式化字符串作为参数,这样就需要再取得该列的精度来对Number(10, 0), Number(10, 2) 或者 Number类型进行不同的处理,有没有其它的办法处理啊
我用MetaData类取得列的数据类型时,为什么得不到float类型的数据,float类型值为4,但所有的float类型返回的都为2,即为NUMBER类型
我发现用setXXX函数可以对sql修改,但是修改结果只在执行时才体现出来,用getSQL看不到修改后的结果。但有一点,我在select * from :1 语句中对表名setString就无效,在update :1 set .... 这种语句中也无效,也就是说对表名的参数赋值不管用,这是真的吗?
registerOutParam函数为什么总返回一个ora-32109的错误呢
#27
不好意思啊,上面打错字了,是希望大家帮助解答一下,真不知道为什么会出来个“五禽戏人”
呵呵
呵呵
#28
number只是数值类型的统称,你得根据实际情况,可以getInt, getFloat, getDouble等等
根据datatype的precision和scale可以判断得到。
select * from :1是无效的动态语句。动态绑定是指绑定字段变量的值,不要混淆,它不是指对表名的绑定。
registerOutParam如果使用合适,应该不会有错。
Good Luck.
根据datatype的precision和scale可以判断得到。
select * from :1是无效的动态语句。动态绑定是指绑定字段变量的值,不要混淆,它不是指对表名的绑定。
registerOutParam如果使用合适,应该不会有错。
Good Luck.
#29
帅哥,你好像常在啊,不介意的话加我QQ吧
55659592
55659592
#30
如果介意的话请明示,俺还等着呢
可是为什么还有要OCCIFLOAT这种类型呢?示例程序上也有判断,如果该字段为float就打印出“FLOAT”呢。
可是为什么还有要OCCIFLOAT这种类型呢?示例程序上也有判断,如果该字段为float就打印出“FLOAT”呢。
#31
我编译过OCCI
可惜散分了
可惜散分了