ADO/C++连SYBASE数据库时_RecordsetPtr的RecordCount总返回-1

gun2 2000-07-17 07:47:00
我是用ADO与C++写访问SYBASE数据库的程序。
...

_ConnectionPtr con;
...
_RecordsetPtr rec = con->Execute( (LPCTSTR)Msg, 0, adCmdUnknown );
...
rec->RecordCount总是等于-1,何故?
...全文
324 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wobuhui 2001-09-06
  • 打赏
  • 举报
回复
e
xwchena 2001-09-06
  • 打赏
  • 举报
回复
好像rec->RecordCount是返回你访问过的记录的数量,所以要先把记录走一遍,再调用
rec->RecordCount才能取得正确的结果
gun2 2000-08-09
  • 打赏
  • 举报
回复
其实,大家也许忽略了一点:同样这一段程序,连SYBASE有问题,连SQL Server就没有。

请问何故?
zhq2000 2000-07-22
  • 打赏
  • 举报
回复
当ADO无法统计记录数时
RecordCount返回-1
AbsolutePosition返回-1
zhq2000 2000-07-22
  • 打赏
  • 举报
回复
要ADO的RecordCount返回正确值,必须指定游标类型为adOpenKeyset或adOpenStatic。
而adOpenForwardOnly为只向前游标,所以无法统计记录数;
adOpenDynamic为动态游标,用它可以动态地增加记录,修改记录或删除记录,不需要使用Requery就能在已打的记录集中体现出来,所以adOpenDynamic是最灵活方便的游标,但
正因为它的这些特点,所以无法动态地统计当前的记录数及当前记录位置,记录数可通过另两种方式来获取:
1、用Open("Select count(*) from TableName where 'your condition here'")。
2、用MoveFirst,MoveNext进行统计。
zzh 2000-07-22
  • 打赏
  • 举报
回复
不用如此复杂,可以用SQL语句来取名总数db.Open("select Count(*) from 表名");这样就可以返回记录数了。
lionpb 2000-07-22
  • 打赏
  • 举报
回复
我也碰到过这种问题,不过原因是因为我使用了事务机制,在事务处理中,相关的数据库被锁定,只有提交或回滚事务(即事务结束)之后才解锁,在此期间,是无法取得RecordCount的.
Tyro 2000-07-22
  • 打赏
  • 举报
回复
ADO的默认游标类型是前向游标adOpenForwardOnly,在游标类型为adOpenForwardOnly
时recordCount的值是-1,要想获得recordcount的真正值,你必须在打开记录集的时候设置记录集的游标类型为adOpenKeyset或adOpenDynamic
UserReg 2000-07-22
  • 打赏
  • 举报
回复
我是用ADO与C++写访问SYBASE数据库的程序。
...

...
_RecordsetPtr rec = con->Execute( (LPCTSTR)Msg, 0, adCmdUnknown );
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
打开方式应该用静态表,或者Keyset方式打开就能正确返回RecordCount
...
rec->RecordCount总是等于-1,何故?




gun2 2000-07-22
  • 打赏
  • 举报
回复
谢谢!请稍待,等我把问题搞清楚便给分.
stepbystep 2000-07-18
  • 打赏
  • 举报
回复
ADO的默认游标类型是前向游标,con->execute(..)更是如此,
在此情况下recordCount的值是-1,要使recordcount起作用,你
必须给定义的rec设置游标类型,为adOpenDynamic,用rec.open打开
就可以了。
guo_jerry 2000-07-18
  • 打赏
  • 举报
回复
MoveFirst,MoveNext 不是好办法,你试试
如下方法:
pRecordSet.CreateInstance(_uuidof(Recordset));
pRecordSet->CursorType=adOpenStatic;//问题出在这
bird2000 2000-07-18
  • 打赏
  • 举报
回复
在引用rec->RecordCount前,先调用movefirst()和movelast()。应该就可以了。呵呵
endlessing 2000-07-17
  • 打赏
  • 举报
回复
i have done some work with ADO & SQL, and i find the same problem. i don't mind it. you can get the result from MoveFirst, MoveNext.

4,011

社区成员

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

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