在用c++采用ado的方法连接access数据库,连不上,之前已经配置了ODBC数据源,调试显示的错误信息为:
R6010-abort() has been called代码如下:
#include <iostream>
#include <string>
using namespace std;
//导入ADO动态链接库,必须的
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")void main()
{
 _ConnectionPtr m_pConnection; //创建智能指针,必须的
     CoInitialize(NULL); //初始化COM,必须的
 m_pConnection.CreateInstance(__uuidof(Connection));  //或 m_pConnection.CreateInstance("ADODB.Connection");
  m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.accdb"," "," ",adModeUnknown);  m_pConnection->Close();
  m_pConnection->Release();  CoUninitialize(); //释放COM
   
}

解决方案 »

  1.   

    CoInitialize(NULL);介个应该放在第一句吧
      

  2.   

    m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.accdb"," "," ",adModeUnknown);
    这个红色的是啥?这应该写个数据库路径啊,ado连接不用创建数据源,这直接写绝对路径或相对路径都可以
      

  3.   

    CoInitialize(NULL);介个应该放在第一句吧还是不行
      

  4.   

    我改写过绝对路径,Data Source=d:\\work\\data.accdb,还是不行,出来同样的错误
      

  5.   

    这个通过ado连接,和电脑其他地方的配置有关系吗
      

  6.   

    翻了我以前的一段代码,你自己参考参考,我也不太会了~
    _ConnectionPtr pConnection;
    _RecordsetPtr pRecordset;
    ......CoInitialize(NULL);
    pConnection.CreateInstance("ADODB.Connection");
    pConnection->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\Data\\test.mdb";
    // pConnection->ConnectionTimeout=10;
    // pConnection->Mode=adModeUnknown;//adModeUnknown=0
    pConnection->Open("","", "", adConnectUnspecified);
    pRecordset.CreateInstance("ADODB.RecordSet");
    pRecordset->Open("wordtable",_variant_t((IDispatch*)pConnection,true),adOpenKeyset,adLockOptimistic,adCmdTable);
    ......pRecordset->Close();
    pConnection->Close();
    pRecordset=NULL;
    pConnection=NULL;
    CoUninitialize();
      

  7.   

    贴孙鑫的代码:
    void CAdoDlg::OnBtnQuery() 
    {
        // TODO: Add your control notification handler code here
        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";//SQL SERVER    pConn->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\IBM\Desktop\语言编程\test.mdb";//access
        pConn->Open("","","",adConnectUnspecified);    pRst=pConn->Execute("select * from 产品",NULL,adCmdText);
        //pRst->Open("select * from authors",_variant_t((IDispatch*)pConn),
        //    adOpenDynamic,adLockOptimistic,adCmdText);
    /*    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("类别"));
            pRst->MoveNext();
        }
        CString test=(LPCSTR)pConn->ConnectionString;
        pRst->Close();
        pConn->Close();
        pCmd.Release();
        pRst.Release();
        pConn.Release();
        CoUninitialize();
    }
    点击vc-工具-连接数据库:
    数据源:
    access数据库则选Microsoft Access 数据库文件 (OLE DB)
    浏览:
    选择你数据库。
    点“测试连接”;打开“高级”:把最下的:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\IBM\Desktop\语言编程\test.mdb复制到下面引号中来:strSQL = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = SHIBIEDB.mdb";
      

  8.   

    搞定了,第一是provider变了,还有data source的完整路径,谢谢各位