c++-求救!C++的OTL库otl_stream不能正常结束的问题

问题描述

求救!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

c++-求救!C++的OTL库otl_stream不能正常结束的问题的相关文章

c++-OTL库的otl_stream有类似fstream的seekg函数一样的函数吗?

问题描述 OTL库的otl_stream有类似fstream的seekg函数一样的函数吗? otl_stream有类似fstream的seekg函数一样的函数吗?如果没有的话如何实现类似功能?假如一个行中有5个元素我只需要读第2,3,5个元素,如何做?难道必须将5个元素读到一个数组中再读取吗?但是我不知道第1,4个元素的数据类型,所以都第1,4个元素时不知道用什么类型的变量作为流操作符>>右边的操作变量,我只知道第2,3,5个元素的数据类型,这该如何处理呢?如果otl_stream实现了类似f

在MFC中使用OTL库连接数据库

 http://hyhvi.iteye.com/blog/1549639 在Win32控制台程序下,要使用OTL库,只需在程序加入OTL头文件,并写上以下两句代码即可(ODBC方式):     #define OTL_ODBC      #include "otlv4.h" 但是在编写MFC程序的时候,单单用以上的做法是不行的,编译的时候会出现如下错误(error LNK 2019):     解决办法是再加入ODBC库,如下:     #define OTL_ODBC     #

ucontext-人人都可以实现的简单协程库

1.干货写在前面 协程是一种用户态的轻量级线程.本篇主要研究协程的C/C++的实现. 首先我们可以看看有哪些语言已经具备协程语义: 比较重量级的有C#.erlang.golang* 轻量级有python.lua.javascript.ruby 还有函数式的scala.scheme等. c/c++不直接支持协程语义,但有不少开源的协程库,如: Protothreads:一个"蝇量级" C 语言协程库 libco:来自腾讯的开源协程库libco介绍,官网 coroutine:云风的一个C语

《精通QTP——自动化测试技术领航》—第1章1.5节QTP精华—对象库(上)之基础攻略篇

1.5 QTP精华-对象库(上)之基础攻略篇 精通QTP--自动化测试技术领航 阶段要点 初步了解QTP中的测试对象模型. 明确Object Identification是管理对象模型的长官. 掌握智能识别原理.机制和各项设置. 对象库基本操作之添加.更新.对象闪烁.副对象库(Associate Repositorys). 一个有趣的实验证明,做项目时手工添加对象的好处与效率. Export Local Objects与Export and Replace Local Objects. 掌握并熟

【原创】基于 MySQL Connector/C 实现客户端程序之 API 总结

[关于 mysql_query() ] 下面是官网对于 mysql_query() 的说明. ===  [22.8.7.52. mysql_query()]  ? 1 int mysql_query(MYSQL *mysql, const char *stmt_str) 功能:  执行由 stmt_str 指定的 NULL 结尾的 SQL 语句.通常情况下,由 stmt_str 指定的内容是单条 SQL 语句,且结尾没有分号 ";" 或者 "\g" .如果使能了多语

PostgreSQL 10.0 逻辑复制原理与最佳实践

标签 PostgreSQL , logical replication , 逻辑复制 , 最佳实践 背景 PostgreSQL 从2010年发布的9.0开始支持流式物理复制,备库可以作为只读库打开,提供给用户使用. 物理复制的好处 1. 物理层面完全一致,这是许多商业数据库的惯用手段.例如Oracle的DG. 2. 延迟低,事务执行过程中产生REDO record,实时的在备库apply,事务结束时,备库立马能见到数据.不论事务多大,都一样. 3. 物理复制的一致性.可靠性达到了金融级的需求,不

MySQL metadata lock的前世今生(5.1=&gt;5.7)

最近有同事经常问到一些metadata lock相关的问题,就顺便理一下吧,主要是整理下相关的连接和文档,标题写的有点大  ----------– 最初为了解决著名的bug#989,在MySQL5.5中开始引入了meta data lock:mdl允许一个事务涉及到的表.库信息直到事务结束都被维持,这样如果一条事务内的某个STATEMENT完成后,其他session发出一条DDL就会被阻塞:这解决了DDL/DML并发导致的复制中断问题. 不过用过5.5的人都知道,这玩意儿实际上太令人讨厌了,尤其

jQuery创建平滑的页面滚动(顶部或底部)_jquery

在这篇文章中,我将通过本教程向您展示了如何创建一个平滑的滚动效果,使用jQuery.让您可以滚动到你的网页的顶部或底部 它是如何工作的 首先,加载jquery库在</ head>标签结束前: 复制代码 代码如下: <script type="text/javascript" src="http://demo.jb51.net/jslib/jquery/jquery1.3.2.js"></script>jQuery滚动到底部: 链接

初探linux pthread多线程编程

多线程的创建,pthread_create: 1 //头文件 2 #include<pthread.h> 3 //函数声明 4 intpthread_create(/*指向线程标识符的指针*/,/*线程属性参数,通常为NULL*/,/*返回值是void类型指针的函数 */,/*运行函数的参数*/); 5 //成功返回0,失败返回错误编号. 注意:被创建的线程可能在pthread_create执行完毕之前就开始执行. 编译注意:编译时注意加上-lpthread参数,以调用静态链接库.因为pthr