请问可能是什么原因?
1、我的步骤是在stdafx.h下面添加:
// 加入ADO支持库
#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF")       
2、添加一个自定义类,主要代码如下:
#include "StdAfx.h"
#include "ADODatabasePtr.h"CADODatabasePtr::CADODatabasePtr(void)
{
}CADODatabasePtr::~CADODatabasePtr(void)
{
}// //打开数据库
bool CADODatabasePtr::OpenDatabase(CString strConnection)
{
HRESULT hr = ::CoInitialize(NULL); if (!SUCCEEDED(hr))
return false; _bstr_t strConnect(strConnection); try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");
if (!SUCCEEDED(hr))
return false; if (!SUCCEEDED(m_pConnection->Open(strConnect,"","",adModeUnknown)))
return false;
}
catch (_com_error* e)
{
TRACE("Connect Database fail,%s\r\n",e->ErrorMessage());
} return true;
}
bool CADODatabasePtr::CloseDatabase()
{
if (NULL == m_pConnection)
return true; try
{
m_pConnection->Close();
m_pConnection = NULL;
}
catch (_com_error* e)
{
TRACE("Close Database fail,%s\r\n",e->ErrorMessage());
} return true;
}_RecordsetPtr CADODatabasePtr::Select(CString strSelect)
{
_bstr_t CommandText(strSelect);
//m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(CommandText,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockBatchOptimistic,adCmdText); return m_pRecordset;
}bool CADODatabasePtr::Execute(CString strSql)
{
_bstr_t CommandText(strSql);
_variant_t RecordsAddected;
m_pConnection->Execute(CommandText,&RecordsAddected,adCmdText); return true;
}
3、打开是在这里调用:
CString strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
strCon += "Test.mdb";
m_db.OpenDatabase(strCon);mfcaccessdatabase

解决方案 »

  1.   

    用绝对路径打开试试。
    异常捕获改成这样试试。
    try
    {
    //你的ADO代码
    }
    catch (_com_error& e)
    {
    CString strMsg;
    strMsg.Format(_T("错误描述:%s\n错误消息%s"), 
    (LPCTSTR)e.Description(),
    (LPCTSTR)e.ErrorMessage());
    AfxMessageBox(strMsg);
    }
      

  2.   

    谢谢你的回答,不过程序断点看了,没进异常,二千open函数里面inline HRESULT Connection15::Open ( _bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options ) {
        HRESULT _hr = raw_Open(ConnectionString, UserID, Password, Options);
        if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
        return _hr;
    }可以看到—_hr是等于E_FAIL,然后就崩掉了( if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));)。。
      

  3.   

    用这个ADO助手试试连接字符串和SQL语句。
      

  4.   

    字符窜连接要是能看出来  那你就是大牛了
     用adoassitant软件 看!