vc6+ado连Access时_ConnectionPtr指针Open失败
农叔叔 2006-09-13 09:31:31 我本来想做一个读写ACCESS的类,但是不知道为什么总是open的时候出错,
异常提示:
e.Source() = "Provider"
e.Description()="灾难性故障"
已经有的前提条件:
dbase.mdb文件已经在正确的路径
#pragma warning(disable:4146)
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF")
#pragma warning(default:4146)
using namespace ADODB;
if (!AfxOleInit())
{
AfxMessageBox("Init OLE 失败!");
return FALSE;
}
这里是初始化的函数
HRESULT COprAccess::Init(LPCTSTR sfilepathname = "dbase.mdb")//,LPCTSTR sheetname
{
m_sfilename = sfilepathname;
// m_sheetname = sheetname;
char sConn[512] = {0};
sprintf(sConn,_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dbase.mdb"),
m_sfilename);
_bstr_t bsConn( sConn );
// m_pConnection.CreateInstance(__uuidof(Connection));
try
{
if (m_pOwnConn.CreateInstance( __uuidof(Connection) ))
{
AfxMessageBox("创建连接数据库指针失败!");
}
m_pDataRs.CreateInstance( __uuidof(Recordset) );
m_pDataRsHis.CreateInstance( __uuidof(Recordset) );
m_pOwnConn->ConnectionTimeout=60;
m_pOwnConn->CommandTimeout=180;
try
{
if (m_pOwnConn->GetState() == adStateOpen)
{
}
else
{
//执行下面这句就会变成异常
m_pOwnConn->Open( bsConn, "", "", NULL );
}
}
catch (_com_error &e)
{
int iret = GetLastError();
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
CString sTmp="m_pOwnConn Open失败";
sTmp += (LPCSTR) bstrDescription;
g_Log.WriteLogLine(sTmp,sTmp.GetLength(),"COprAccess::Init",ERRORLEVEL);
m_pOwnConn = NULL;
return -1;
}
// m_bDbConned = TRUE;
m_lisvalid = 1;
return 0;
}
catch(_com_error &e)
{
CString stemp ;
stemp = "m_pDataRs指针创建实例失败";
stemp += e.ErrorMessage();
g_Log.WriteLogLine(stemp,stemp.GetLength(),"COprAccess::Init",ERRORLEVEL);
return -1;
}
}