问题描述
- 求救!C++的OTL库otl_stream不能正常结束的问题
-
根据说明文档otl_stream类构造函数的第一个参数是缓存区中能存放查询结果的行数,按正常理解,如果表中有100条记录,我将该参数设置成50条(代码如下)应该是可以的,但实际上不行,在读第50条的f2的时候就报错,所以我将该参数设置到200,但是一样读到第100行的f2的时候报错,错误与设置50是一样的,不同只是一个在读第50行最后一列的值时报错,一个在读第100行最后一列的值时报错,且otl_exception中所有属性成员都为空字符串!我将otl源码中的抛出异常的那一句去掉(这是下策,可能造成严重的潜在问题,但是我想看一下结果,而且只是去掉一个throw语句),我想总该没有错误了吧?合理的话,到第100行之后,i.eof()语句应该为false,但是实际却仍是true,所以程序继续执行循环然后报错,看来简单修改一下otl源码也不行,这如何解决呢?很急,望有高手能救一把!void select() {
otl_stream i(50, "select f1,f2 from test_tab", db);
float f1, f2;
while (!i.eof()){ //不知为何i.eof()总是为true?
//i.set_flush(true); //此句加与不加是一样的
i>>f1>>f2;
cout<<"f1="<<f1<<", f2="<<f2<<endl;
} }我用的是SqlServer2005,otl版本4.0.334
解决方案
改好了,暂时未查明原因,估计是某个参数变量(如db是局部变量),与select不在同一函数作用域,然后程序正常运行,又不知道什么时候程序才发现这个变量无效了,就将某个状态变量设置为无效,但是直到运行到超出缓存才去检查这个状态,结果就运行不下去了,初步理解是这样!
时间: 2024-09-22 00:08:02