先#import msado15.dll
后AfxOleInit
再_CommandPtr _ConnectionPtr _RecordsetPtr,
能通过编译,但运行时就出错了。
test.exe 中的 0x77e6a4e1 处未处理的异常: Microsoft C++ exception: _com_error @ 0x0012f4b8 。

解决方案 »

  1.   

    1.ACCESS 2000#include <icrsint.h>
    #include <basetsd.h>
    #include <ole2.h>#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
        no_namespace rename("EOF", "EndOfFile")
    *******************************************************
    ::CoInitialize(NULL); //初始化Com*******************************************************
    IADORecordBinding   *picRs = NULL;
    _RecordsetPtr pRs("ADODB.Recordset");
    _ConnectionPtr pConn("ADODB.Connection" );
    //CFootballTeamRs rsFootballTeam;
    GetModuleFileName(NULL,FileName,MAX_PATH);
    (_tcsrchr(FileName,'\\'))[1] = 0; lstrcat(FileName,_T("pass2.mdb")); strSql = strSql +
         "Provider=Microsoft.Jet.OLEDB.4.0;" +
     "Data Source = " + 
     FileName +
     ";Persist Security Info=False;Jet OLEDB:Database Password=cd;"; //pConn->ConnectionString = chDataSource;
    //pConn->Provider = _T("Microsoft.Jet.OLEDB.4.0");
    CString sqlSentence = _T("select * from pass");
    try
    {
    pConn->Open((_bstr_t)strSql, "", "", adModeUnknown);  pRs->QueryInterface(
      __uuidof(IADORecordBinding), (LPVOID*)&picRs);   pRs->Open(  (_variant_t)sqlSentence,                // 查询DemoTable表中所有字段
    pConn.GetInterfacePtr(),  // 获取库接库的IDispatch指针
    adOpenDynamic,
    adLockOptimistic,
    adCmdText);
    }
    catch(...)
    {}
      

  2.   

    是否退出时,关闭RecordSet,Connection
      

  3.   

    1.stdafx.h中加入
    #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 
    2。app文件的InitInstance中加入
    if(S_OK!=OleInitialize(NULL))
    {
    AfxMessageBox("初始化COM组件库错误");
    }
    下面就是数据库操作
    _ConnectionPtr pConn;
    _RecordsetPtr  pRs;
    CString strSQL;
    pConn.CreateInstance(__uuidof(Connection));
    pConn->CursorLocation=adUseClient;
    strSQL="Provider=SQLOLEDB;Server=Gooyan;DataBase=SkillsBox;UID=sa;PWD=aaaaaaaa";
    pConn->Open(_bstr_t(strSQL),"","",-1);pRs.CreateInstance(__uuidof(Recordset));
    pRs->CursorLocation=adUseClient;
    pRs->PutActiveConnection(pConn.GetInterfacePtr());pRs1.CreateInstance(__uuidof(Recordset));
    pRs1->CursorLocation=adUseClient;
    pRs1->PutActiveConnection(pConn.GetInterfacePtr());strSQL="select * from catalog order by cataid";
    pRs->Open(_bstr_t(strSQL),vtMissing,adOpenDynamic,adLockBatchOptimistic,adCmdText);
      

  4.   

    请教是否在用ADO编程时必须要加入错误处理的部分???
      

  5.   

    现在还不想结,因为我已经找到了问题所在.希望能将这个讨论下法
    ADO(注意不是ADO.NET)连接不同的如ACCESS 如SQL 甚至不同的版本的ACCESS都是不同的字符串>
    本题词中"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=abc.mdb;”,“”,“”,adModeUnknown)
    1.这里如果你的abc.mdb不在当前目录下,则也可以这样写D:\\mydocumety\\XXX\\abc.mdb;”,“”,“”,adModeUnknown)
    注意这晨是\\,这是我费了很大时间搞清楚的。
    2。如果你的abc.mdb没有密吗,则上面这样一般就能接通/
    如果有密吗,那么是不能直接在连接串中写入密吗的,那样会出现一个“未处理的连接错误”