ACCESS 频繁打开关闭后 打开失败

小坤 2013-01-06 11:24:58

_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
CString connsStr(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="));
connsStr += m_dbName;
m_pConnection->Open((_bstr_t)connsStr,_T(""),_T(""),adModeUnknown);
}
catch(_com_error e)
{ //错误有一个线程,到一定的条件就调用此函数,在Access存贮20M内容左右,
运行56分钟后,会出现打开失败。此后就一直是打开失败
_bstr_t bstrDescription(e.Description());
CString strErro=(LPCSTR)e.Description();
CDebug::ShowDetailMessage(_T("open DB failed!"));
CDebug::ShowDetailMessage(strErro.GetBuffer());
strErro.ReleaseBuffer();
strErro = (LPCSTR)e.ErrorMessage();
CDebug::ShowDetailMessage(strErro.GetBuffer());

if(m_pConnection->State)
{
m_pConnection->Close();
m_pConnection.Release();
}
m_pConnection= NULL;

return FALSE;
}
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));

try
{
CString sql(_T("SELECT * FROM "));
sql = sql + m_dbTable;
m_pRecordset->Open((_variant_t)sql, // 查询DemoTable表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error e)
{
_bstr_t bstrDescription(e.Description());
CString err = (LPCSTR)e.Description();
CDebug::ShowDetailMessage(err.GetBuffer());
return FALSE;
}
try
{
//插入数据部分省略
m_pRecordset->Update();
}
catch(_com_error e)
{
_bstr_t bstrDescription(e.Description());
CString err = (LPCSTR)e.Description();
CDebug::ShowDetailMessage(err.GetBuffer());
}
m_pRecordset->Close();
m_pRecordset.Release();
m_pRecordset = NULL;

//关闭数据库
if(m_pConnection->State)
{
m_pConnection->Close();
m_pConnection.Release();
}
m_pConnection= NULL;

return TRUE;


//错误有一个线程,到一定的条件就调用此函数,在Access存贮20M内容左右,即运行56分钟后,会出现打开失败。此后就一直是打开失败 未指定的错误
...全文
348 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
小坤 2013-01-29
  • 打赏
  • 举报
回复
问题解决了,我现在在初始化时连接一次,同时连接表。 在退出时关闭就可以了。 好像是由于频繁的打开表造成的。
wyx100 2013-01-15
  • 打赏
  • 举报
回复
数据库没有关闭!
wyx100 2013-01-15
  • 打赏
  • 举报
回复
频繁打开关闭 我用文件频繁打开也出错!
小坤 2013-01-15
  • 打赏
  • 举报
回复
我现在就是和数据库连接一次,退出时断开。 就是每次存的时候open一次,close一次。 但是采集了3.5小时(190万条数据时)会提示临时磁盘空间不够。 网上有说改注册表中存储数据条数的限制。 正在试试,不知道可有其他方法。
Eleven 2013-01-14
  • 打赏
  • 举报
回复
一般只用打开一次,关闭一次吧。程序初始化的地方打开数据库,退出的时候关闭数据库,期间直接操作数据库就可以了吧~
小坤 2013-01-14
  • 打赏
  • 举报
回复
引用 2 楼 sha_jinhao 的回复:
频繁打开关闭 我用文件频繁打开也出错!
是由于频繁打开关闭引起的,我改了只打开一次,退出时关闭。 但是现在采集到3.5小时后会出现缓存不够用。
LiuYinChina 2013-01-07
  • 打赏
  • 举报
回复
在多线程里,用 COM 的东西,有可能涉及到 线程和 COM 套间的问题,出了问题,就难搞, 不是一两句说得清的,祝你好运。
jimette 2013-01-06
  • 打赏
  • 举报
回复
频繁打开关闭 我用文件频繁打开也出错!
zyq5945 2013-01-06
  • 打赏
  • 举报
回复
不清楚,考虑换下数据库吧。

4,011

社区成员

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

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