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;
}
}
...全文
520 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
农叔叔 2006-09-16
  • 打赏
  • 举报
回复
算了就这样吧,给分了
billy145533 2006-09-14
  • 打赏
  • 举报
回复
没见过,关注
农叔叔 2006-09-14
  • 打赏
  • 举报
回复
唉,为什么会这样子了,一旦我把Project->setting->link->output下的reserve设置了大小比如说0x10000000就会导致我的那个ADO _ConnectPtr Open异常.设置那个大小 是因为我设置通信缓冲的时候设置得大了一点,导致会SOCKET的connect出错.
现在找到一个折衷的办法了,缓冲设置小,把reserve清空不填,就可以不出现错误,但是不知道为什么会出现错误,有碰到过类似的问题的人说一下问题所在啊
lshddd 2006-09-13
  • 打赏
  • 举报
回复
是不是bsConn有问题啊,你在那句前面设个断点,看一下bsConn的值对不对吧
农叔叔 2006-09-13
  • 打赏
  • 举报
回复
发生这种异常的情况有哪些原因呢?
大家来说说看啊,唉.
农叔叔 2006-09-13
  • 打赏
  • 举报
回复
而且,我把这段加到一个干净的工程里却可以执行成功不异常.
我靠,快死了,

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧