MFC中用DAO类访问Access数据库非常方便,但DAO不支持多线程,
这里有一篇文章介绍了跨线程使用CDaoDatabase类存在的问题。
手上的一个项目,CDaoDatabase对象只在工作线程中创建和调用,虽然数据库操作正常,但关闭主窗口的时候会出错,原因是主线程中自动记录了CDaoDatabase对象的指针,主线程结束时会自动进行清理工作,但是对象已经在工作线程结束时被释放了。想了一下,试着将AfxDaoInit()函数和AfxDaoTerm()函数也放进工作线程就可以了:
-
UINT ImportDataFromDb(LPVOID param)
-
{
-
MLCImportingDlg *pDlg = (MLCImportingDlg*)param;
-
AfxDaoInit();
-
CDaoDatabase db;
-
db.Open(pDlg->dbFileName, FALSE, TRUE);
-
//进行数据库操作
-
db.Close();
-
AfxDaoTerm();
-
pDlg->SendMessage(WM_CLOSE);
-
return 0;
-
}
阅读(4578) | 评论(0) | 转发(0) |