两种ADO初始化方法,却得到不同效果!请教高手解决

clement212 2005-08-04 01:15:58
先说说成功的方法

使用MFC向导,生成一个基于对话框的工程
在stdafx.h中的最后添加
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")
编译,在debug目录下生成两个文件,msado.tli tlh,将他们引入工程。

然后在对话框添加列表框和按钮,添加按钮单击响应函数OnBtnQuery(),代码如下:
void CAdoDlg::OnBtnQuery()
{
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("","","",adConnectUnspecified);

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

pRst->Close();
pConn->Close();
pCmd.Release();
pRst.Release();
pConn.Release();
CoUninitialize();
}

编译通过,执行正确!
///////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
以下是另外一种方法,结果是编译不通过!
向导生成一个多文档工程,添加老地方import语句,另外还加了个头文件#include <comdef.h>
如上编译通过,debug下生成两个文件,引用之。

在app的InitInstance()下加了句AfxOleInit();

另外在Doc类的.h中加入两个变量:
BOOL m_IsConnectionOpen;

_CollectionPtr m_pConnection;

在Doc类的.cpp中的构造函数初始化两变量:
m_IsConnectionOpen = FALSE;
m_pConnection = NULL;

--〉关键地方到了
在Doc类的.cpp的OnNewDocument()中创建连接,代码如下:
BOOL CDatabasetestDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;


HRESULT hr;
hr = m_pConnection.CreateInstance(__uuidof(Connection));

if(SUCCEEDED(hr))
{
hr = m_pConnection->Open(。。。)//里面的参数与第一个例子一样。
}
return TRUE;
}
编译就开始报错了!
error C2039: 'Open' : is not a member of '_Collection'
see declaration of '_Collection'

怪了,注释掉Open,设置断点到CreateInstance处也是发现hr总是个很大的负数

如果采用第一种方法在OnNewDocument()中定义局部变量,并初始化,就没问题!


特此请教高手!

在线等待

谢谢
...全文
169 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
不可触碰 2005-08-05
  • 打赏
  • 举报
回复
_CollectionPtr m_pConnection??
_ConnectionPtr???
hahu 2005-08-04
  • 打赏
  • 举报
回复
_CollectionPtr m_pConnection;
clement212 2005-08-04
  • 打赏
  • 举报
回复
解决了

晕~~~~

是定义时出了错!!!

哎~~~~~~~~~~~~~
clement212 2005-08-04
  • 打赏
  • 举报
回复
没人理我!

自己re一个!


4,011

社区成员

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

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