MFC下CRecordSet类movenext到一定程度但是没到末尾就会报错

thriston 2015-03-02 10:56:57
MFC用的VC2008
数据库用的SQL Server2005

我是做数据提取,需要将数据提取出来存到文件,使用的ODBC的方式
CRecordSet表类的字段有一个是text类型,存的数据时10000字节。
在提取到大概几万条记录的时候就会报错。


while(!ISEOF())
{
movenext();
//////dosomething
}

记录集并没有到最后一条记录,但是就会报错。感觉是某个缓冲区没有开够的样子,查了一些时间没有查到类似的问题,有人遇到过类似的问题吗?
...全文
486 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
thriston 2015-06-11
  • 打赏
  • 举报
回复
结贴 是我打开数据表的方式不对,应该用forwardonly,而不是snapshot,用只读打开可以随便往后遍历。
thriston 2015-06-11
  • 打赏
  • 举报
回复
打开数据表的方式不对,应该用forwardonly,而不是snapshot 我遇到过这个问题,你试一下,应该可以解决。
Oliver2891 2015-04-03
  • 打赏
  • 举报
回复
数据量太大了确实用分页查询比较好
wyx100 2015-03-10
  • 打赏
  • 举报
回复
引用 2 楼 oyljerry 的回复:
数据库数据如果是太多了,那么sql查询的时候就不要一次性全查出来,分页查询
worldy 2015-03-10
  • 打赏
  • 举报
回复
检查是什么错,才能有地放屎
风--还在吹 2015-03-10
  • 打赏
  • 举报
回复
去catch _com_error 看能不能捕捉到
thriston 2015-03-09
  • 打赏
  • 举报
回复
今天做了一下实验,发现 move()调用的是 AFX_ODBC_CALL(::SQLExtendedFetch(m_hstmt,wFetchType, nRow,pdwRowsFetched,m_rgRowStatus)); 出错的时候返回值是SQL_SUCCESS_WITH_INFO 让我采用SQLError 获取错误码,但是VC自带的.cpp不让修改,我再研究下怎么获取错误码。 关于:CDBException 运行不到捕获错误,就出错了。
LittleCommit 2015-03-03
  • 打赏
  • 举报
回复
你可以用try...catch捕获一下com错误和内存错误,打印一下错误描述,看看是什么错误 try { while(!ISEOF()) { movenext(); //////dosomething } } catch(_com_error e) { printf(_T("%s"),e->Description()); }
zgl7903 2015-03-03
  • 打赏
  • 举报
回复
捕捉 CDBException
oyljerry 2015-03-03
  • 打赏
  • 举报
回复
数据库数据如果是太多了,那么sql查询的时候就不要一次性全查出来,分页查询

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧