_RecordsetPtr m_pRecordset; 
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("select * from ProbData order by DeviceId",
                      _variant_t((IDispatch*)hr,true),adOpenStatic,adLockOptimistic,adCmdText); ///执行命令,取得记录集

执行到第3句时报错:
unhandled exception in ***.exe
为什么? 少了什么导入文件吗?

解决方案 »

  1.   

    1. 生成应用程序框架并初始化OLE/COM库环境
    创建一个标准的MFC AppWizard(exe)应用程序,然后在应用程序类的InitInstance函数中初始化OLE/COM库(因为ADO库是一个COM DLL库)。
    BOOL CADOTestApp::InitInstance()
    { //初始化OLE/COM库环境
    AfxOleInit();}
    2. 引入ADO库文件
    使用ADO前必须在工程的stdafx.h文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下:
    #include 〈comdef.h〉
    #import "c:\program files\common files\system\ado\msado15.dll"
    no_namespace
    rename ("EOF","adoEOF")
    头文件comdef.h使我们的应用程序能够使用Visual C++中的一些特殊COM支持类,这些类使得处理OLE自治更为容易一些,OLE自治是ADO使用的数据类型。后三行使用#import指令在我们的应用程序中输入ADO类库定义。
    ADO类的定义是作为一种资源存储在ADO DLL(msado15.dll)中,在其内部称为类型库。类型库描述了自治接口,以及C++使用的COM vtable接口。当使用#import指令时,在运行时Visual C++需要从ADO DLL中读取这个类型库,并以此创建一组C++头文件。这些头文件具有.tli 和.tlh扩展名,读者可以在项目的目录下找到这两个文件。在C++程序代码中调用的ADO类要在这些文件中定义。
      

  2.   

    还是建议你先看看《ADO开发指南》
    需要我可以发给你
    来信注明索取什么?
      

  3.   

    看例子:http://www.vckbase.com/document/viewdoc/?id=496
      

  4.   

    光看这几行也看不出来,楼主可以参考下
    准备:    
      (1)、引入ADO类      
         
      #import   "c:\program   files\common   files\system\ado\msado15.dll"   \    
      no_namespace   \    
      rename   ("EOF",   "adoEOF")    
      (2)、初始化COM    
         
      在MFC中可以用AfxOleInit();非MFC环境中用:      
      CoInitialize(NULL);    
      CoUnInitialize();    
         
      (3)#import   包含后就可以用3个智能指针了:_ConnectionPtr、_RecordsetPtr和_CommandPtr    
         
      1.连接和关闭数据库   (1)连接      
         
      例子:连接Access数据库    
      AfxOleInit();//初始化    
      HRESULT   hr;    
      try    
      {    
      hr   =   m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象    
      if(SUCCEEDED(hr))    
      {    
      m_pConnection->ConnectionTimeout   =   0;    
      hr   =   m_pConnection->Open(   "Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=db.mdb",   "",   "",   adModeUnknown);    
      //m_pConnection->PutDefaultDatabase   ((_bstr_t)"DB");//设置默认数据库    
         
      m_pCommand.CreateInstance(__uuidof(Command));    
      m_pCommand->CommandTimeout   =   5;    
      m_pCommand->ActiveConnection   =   m_pConnection;    
      }    
      }    
      catch(_com_error   e)///捕捉异常    
      {    
      CString   errormessage;    
      errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());    
      AfxMessageBox(errormessage);///显示错误信息    
      }