ADO中_CommandPtr问题

yuan697 2010-02-03 09:14:53
有个ADO程序。自我感觉没啥问题,可是运行就是没反应,还请大家帮忙看看

_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
_CommandPtr m_pCommand;
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Data//Tally.mdb","","",adModeUnknown);
m_pCommand.CreateInstance(__uuidof(Command));
m_pCommand->ActiveConnection = m_pConnection; /* 将库连接赋于它 */
m_pCommand->CommandText = "SELECT * FROM TallyUser"; /* SQL语句 */
m_pCommand->CommandType=adCmdText;
m_pCommand->Parameters->Refresh();
m_pRecordset = m_pCommand->Execute(NULL, NULL, adCmdUnknown); /* 执行SQL语句,返回记录集 */

运行的结果m_pRecordset->RecordCount==-1,但是数据库里是有数据的
...全文
202 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
一条晚起的虫 2010-02-03
  • 打赏
  • 举报
回复
// 经常用SELECT COUNT(*) AS rsCount FROM table
// 然后取rsCount的值来判断记录数。
// 客户端游标在大数据量时效率不如服务端游标。
一条晚起的虫 2010-02-03
  • 打赏
  • 举报
回复
	_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->CursorLocation = adUseClient;
yuan697 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 havedown 的回复:]
RecordCount,不灵的呀。
[/Quote]
那要用什么判断记录个数呢?
yuan697 2010-02-03
  • 打赏
  • 举报
回复

_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
_CommandPtr m_pCommand;
if (!AfxOleInit())
{
AfxMessageBox("OLE初始化出错!");
}
m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordset->CursorLocation = adUseClient;
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Data//Tally.mdb","","",adModeUnknown);
m_pCommand.CreateInstance(__uuidof(Command));
m_pCommand->ActiveConnection = m_pConnection; /* 将库连接赋于它 */
m_pCommand->CommandText = "SELECT * FROM TallyUser"; /* SQL语句 */
m_pCommand->CommandType=adCmdText;
m_pCommand->Parameters->Refresh();
m_pRecordset = m_pCommand->Execute(NULL, NULL, adCmdUnknown); /* 执行SQL语句,返回记录集 */

一个函数就这样而已,到m_pRecordset->CursorLocation = adUseClient; 这一句就挂了
ADO不知道啥版本,引用的是msado15.dll
数据库使用acess 2003格式
vc是6.0 sp6
一条晚起的虫 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yuan697 的回复:]
// 在_ConnectPtr->Open()之前加


在_ConnectPtr->Open()之前加 还是挂了
[/Quote]

// 贴下代码看看?还有ADO版本,数据库版本,VC版本。
havedown 2010-02-03
  • 打赏
  • 举报
回复
RecordCount,不灵的呀。
yuan697 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lfchen 的回复:]
引用 9 楼 yuan697 的回复:
引用 4 楼 lfchen 的回复:
C/C++ codem_pRecordset->RecordCount==-1;//要想使这个起作用,起码要加上m_pRecordset->CursorLocation=adUseClient;//使用客户端游标,ADO默认是服务器端游标。//很少用这个判断数据集是否有值if(m_pRecordset->EOF&& m_pRecordset->BOF)//记录集指针同时为记录头和记录尾,则没有数据?-

加了这句m_pRecordset->CursorLocation=adUseClient
程序就挂在这句了


// 在_ConnectPtr->Open()之前加
[/Quote]

在_ConnectPtr->Open()之前加 还是挂了
一条晚起的虫 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yuan697 的回复:]
引用 4 楼 lfchen 的回复:
C/C++ codem_pRecordset->RecordCount==-1;//要想使这个起作用,起码要加上m_pRecordset->CursorLocation=adUseClient;//使用客户端游标,ADO默认是服务器端游标。//很少用这个判断数据集是否有值if(m_pRecordset->EOF&& m_pRecordset->BOF)//记录集指针同时为记录头和记录尾,则没有数据?-

加了这句m_pRecordset->CursorLocation=adUseClient
程序就挂在这句了
[/Quote]

// 在_ConnectPtr->Open()之前加
yuan697 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lfchen 的回复:]
C/C++ codem_pRecordset->RecordCount==-1;//要想使这个起作用,起码要加上m_pRecordset->CursorLocation=adUseClient;//使用客户端游标,ADO默认是服务器端游标。//很少用这个判断数据集是否有值if(m_pRecordset->EOF&& m_pRecordset->BOF)//记录集指针同时为记录头和记录尾,则没有数据?-
[/Quote]
加了这句m_pRecordset->CursorLocation=adUseClient
程序就挂在这句了
yuan697 2010-02-03
  • 打赏
  • 举报
回复
如果不使用m_pRecordset->RecordCount,那在进行数据个数统计的时候岂不是要再写SQL判断个数?
flyerwing 2010-02-03
  • 打赏
  • 举报
回复
是不是ACCESS数据库路径有问题?
哦MSSQL的没问题,没搞过,学习

try
{
CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
/*pConn->ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;PassWord=123;Server=.;Initial Catalog=WirelessCare";*/
pConn->ConnectionString=((_bstr_t)ConfigConnString);
pConn->Open("","","",adConnectUnspecified);
pRst=pConn->Execute("select * from City",NULL,adCmdText);
while(!pRst->rsEOF)
{
int iPos=m_MyList->InsertItem(0,(_bstr_t)pRst->GetCollect("id"));
m_MyList->SetItemText(iPos,1,(_bstr_t)pRst->GetCollect("name"));
m_MyList->SetItemText(iPos,2,(_bstr_t)pRst->GetCollect("provinceid"));

pRst->MoveNext();
}
pRst->Close();
pConn->Close();
pRst.Release();
pConn.Release();
CoUninitialize();
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}

希望对您有用
aoyihuashao 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lfchen 的回复:]
C/C++ codem_pRecordset->RecordCount==-1;//要想使这个起作用,起码要加上m_pRecordset->CursorLocation=adUseClient;//使用客户端游标,ADO默认是服务器端游标。//很少用这个判断数据集是否有值if(m_pRecordset->EOF&& m_pRecordset->BOF)//记录集指针同时为记录头和记录尾,则没有数据?-
[/Quote]

呵呵,我以前就是这么判断的,不过不用BOF,查询后就是BOF,直接if(m_pRecordset->EOF)
oyljerry 2010-02-03
  • 打赏
  • 举报
回复
直接sql查询好了,select count from ...
一条晚起的虫 2010-02-03
  • 打赏
  • 举报
回复
m_pRecordset->RecordCount==-1;
//要想使这个起作用,起码要加上
m_pRecordset->CursorLocation=adUseClient; //使用客户端游标,ADO默认是服务器端游标。

//很少用这个判断数据集是否有值
if(m_pRecordset->EOF && m_pRecordset->BOF) //记录集指针同时为记录头和记录尾,则没有数据。
aoyihuashao 2010-02-03
  • 打赏
  • 举报
回复
COMMAND的exec用法应该也一样的
aoyihuashao 2010-02-03
  • 打赏
  • 举报
回复
con.Execute参数详解
参数
CommandText 字符串,包含要执行的 SQL 语句、表名、存储过程或特定提供者的文本。
RecordsAffected 可选,长整型变量,提供者向其返回操作所影响的记录数目。

http://www.cnblogs.com/aoyihuashao/archive/2009/12/22/1629650.html
快乐鹦鹉 2010-02-03
  • 打赏
  • 举报
回复
一般不用这个RecordCount进行任何的判断。
我花钱买的,结果没用上,太亏了 本系统采用ADO来访问SQL数据库,这里充分应用了C++类封装的功能,根据本系统应用的范围,将访问数据库的功能函数封装在一个类CMyDatabase。 正如前所述,ADO是访问数据库的一个方法,它提供了不同的接口。ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。 _ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。对于要返回记录的操作通常用_RecordserPtr来实现。而用_ConnectionPtr操作时要想得到记录条数得遍历所有记录,而用_RecordserPtr时不需要。 _CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用_CommandPtr接口执行存储过程和SQL语句。 _RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtr的connection成员变量,让它自己创建数据连接。如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口 ,然后使用_RecordsetPtr执行存储过程和SQL语句。  根据这些,我们将数据库的各种操作封装到CMyDatabase类里。几个主要函数说明如下:

4,012

社区成员

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

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