我创建了个MFC得对话框项目
然后拖了个列表框和一个BUTTON控件,功能很简单我点击控件后,读出数据到列表种,我的结构如下
我新建了个Data得类,BASS CLASS我选择得是CAnimateCtrl
然后我在头文件种如下写得
public:
Data();
_RecordsetPtr Open(CString strsql,int option);//我想返回个数据集
void Close();//然后关闭销毁2个对象
然后是CPP文件
//打开数据库,然后返回个数据集对象
_RecordsetPtr Data::Open(CString strsql,int option)
{
//初始化ADO连接COM
CoInitialize(NULL);
//打开数据库
pConn->Open("","","",adConnectUnspecified);
//执行数据库
pRst=pConn->Execute((_bstr_t)strsql,NULL,option); return pRst;
}//销毁数据集和连接对象
void Data::Close()
{
pRst->Close();
pConn->Close();
pRst.Release();
pConn.Release();
CoUninitialize();
}然后我在控件的单击方法中是如下写的,而且我也在这类的头文件中引入了data.h和ADO的DLL文件
_RecordsetPtr pRst(__uuidof(Recordset));
CListBox *m_listbox=((CListBox*)GetDlgItem(IDC_LIST1));pRst=daobj.Open("select user_accounts from User_Info",1);
while(!pRst->rsEOF)
{
    m_listbox->AddString((_bstr_t)(pRst->GetCollect("user_accounts")));
    pRst->MoveNext();
}
daobj.Close();我现咱编译可以通过,但是运行就错了.请高手解决下.

解决方案 »

  1.   

    1、_RecordsetPtr Data::Open(CString strsql,int option) 中pRst如何声明的?应该是Data类的类变量吧?
    2、改为 _RecordsetPtr& Open(CString strsql,int option) 
      

  2.   

    可以参考下
    http://www.vckbase.com/document/viewdoc/?id=1557
      

  3.   

    我是在data.cpp中声明的pRst和pConn
    // 数据库连接对象
     _ConnectionPtr pConn(__uuidof(Connection));
    // 数据集对象
     _RecordsetPtr pRst(__uuidof(Recordset));
      

  4.   

    报什么错,说清楚嘛,try catch下
      

  5.   

    m_pRecordset.CreateInstance(__uuidof(Recordset));
    m_pRecordset->Open("select top 2000 * from  account_info where account not in (select top 0 account from account_info)",       
    m_pConnection.GetInterfacePtr(), 
    adOpenDynamic,
    adLockOptimistic,
    adCmdText);  提取数据集
      while(!m_pRecordset->adoEOF)
    {

    strPD = (char *)(_bstr_t)m_pRecordset->GetCollect("account");
    strID = (char *)(_bstr_t)m_pRecordset->GetCollect("pwd");
                    //st_account account_info;
    //account_info.account = strPD;
    //account_info.secret = strID;
    //account.push_back(account_info);
    m_pRecordset->MoveNext();
    }