数据库存在记录,为什么m_pRecordset->GetRecordCount()返回的确实-1

doglu 2005-05-12 05:06:57
如题
...全文
684 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dasiu 2005-07-11
  • 打赏
  • 举报
回复
在对记录集合查询完毕后,包括DAO、ADO等的数据集合等,必须 m_pRecordset->MoveLast();然后使用m_pRecordset->GetRecordCount();才可以得到正确的记录数量。这个地方的说明,在MSDN上有的。
然后
notno 2005-06-27
  • 打赏
  • 举报
回复
受教了
Ozzman 2005-06-27
  • 打赏
  • 举报
回复
是有这样的问题,我的解决方法是:
DWORD dwCount = 0;
dwCount = pRst->GetRecordCount();
if (dwCount == -1)
{
// dwCount = 0;
if (pRst->EndOfFile != VARIANT_TRUE) pRst->MoveFirst();

while (pRst->EndOfFile != VARIANT_TRUE)
{
dwCount++;
pRst->MoveNext();
}
if (dwCount > 0) pRst->MoveFirst();
}
return dwCount;
aben456 2005-06-19
  • 打赏
  • 举报
回复
如果ODBC,那么需要先循环MoveNext一次;才有正确的结果
xwwang66 2005-06-14
  • 打赏
  • 举报
回复
因为str.Format("%d",pRst->GetRecordCount());时,你的pRst已经指到rsEOF所以就......
MajorVon 2005-06-14
  • 打赏
  • 举报
回复
adOpenDynamic
改adOpenKeyset
boqin 2005-06-14
  • 打赏
  • 举报
回复
检查你所访问的数据库表是否定义了主键,如果没有的话,铁定返回的是-1!
Kudeet 2005-06-14
  • 打赏
  • 举报
回复
在m_pSet->Open()前加上:
m_pSet->CursorType = adOpenStatic;
m_pSet->CursorLocation = adUseClient;

http://blog.csdn.net/laiyiling/archive/2005/04/29/367711.aspx
doglu 2005-05-13
  • 打赏
  • 举报
回复
帮我看看吧,谢谢
doglu 2005-05-13
  • 打赏
  • 举报
回复
CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
_CommandPtr pCmd(__uuidof(Command));

pConn->ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs";
pConn->Open("","sa","233",adConnectUnspecified);

//pRst=pConn->Execute("select * from authors",NULL,adCmdText);
//pRst->Open("select * from authors",_variant_t((IDispatch*)pConn),
// adOpenDynamic,adLockOptimistic,adCmdText);
pCmd->put_ActiveConnection(_variant_t((IDispatch*)pConn));
pCmd->CommandText="select * from authors";
pRst->CursorLocation=adUseClient;
pRst=pCmd->Execute(NULL,NULL,adCmdText);
while(!pRst->rsEOF)
{
((CListBox*)GetDlgItem(IDC_LIST1))->AddString(
(_bstr_t)pRst->GetCollect("au_lname"));
pRst->MoveNext();
}

CString str;
str.Format("%d",pRst->GetRecordCount());
MessageBox(str);

pRst->Close();
pConn->Close();
pCmd.Release();
pRst.Release();
pConn.Release();
CoUninitialize();
这样的返回还是-1.怎么回事
friendzj 2005-05-12
  • 打赏
  • 举报
回复
m_pRecordset->CursorLocation=adUseClient; 这样就行了~
sboom 2005-05-12
  • 打赏
  • 举报
回复
m_pRecordset->MoveLast();
m_pRecordset->GetRecordCount();
oyljerry 2005-05-12
  • 打赏
  • 举报
回复
游标放到客户端 adUseClient
或遍历一遍记录集

4,011

社区成员

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

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