请问可能是什么原因?
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、我的步骤是在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
异常捕获改成这样试试。
try
{
//你的ADO代码
}
catch (_com_error& e)
{
CString strMsg;
strMsg.Format(_T("错误描述:%s\n错误消息%s"),
(LPCTSTR)e.Description(),
(LPCTSTR)e.ErrorMessage());
AfxMessageBox(strMsg);
}
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));)。。
用adoassitant软件 看!