一个数据库的问题,up有分!

五行缺钱 2003-06-11 05:48:46
我在程序初始化时打开数据库,代码为:
#ifdef _AFXDLL
AfxGetModuleState()->m_dwVersion = 0x0601;
#endif
g_pDatabase = new CDaoDatabase;
g_pDatabase->Open(_T("app.mdb"));
g_pWorkspace = g_pDatabase->m_pWorkspace;
然后创建了一个线程,在线程中执行如下的代码:
     CUserRecordset *pUserRecordset = new CUserRecordset(g_pDatabase);
try
{
pUserRecordset->Open(dbOpenDynaset);
}
catch(CDaoException *e)
{
e->ReportError();
e->Delete();
return 1;
}
g_pWorkspace->BeginTrans();
pUserRecordset->AddNew();
pUserRecordset->m_UserName = _T("name1");
pUserRecordset->Update();
g_pWorkspace->CommitTrans();
pUserRecordset->Close();
其中CUserRecordset是继承与CDaoRecordset的一个类,与一个数据库表格关联。这样在线程中执行到pUserRecordset->Open(dbOpenDynaset);这句时就会弹出一个对话框:Unhandled exception in App.exe(DAO360.DLL):0xC0000005:Access Violation.不知道什么原因。我试过把线程中的这段代码加入到打开数据库的后面,就能正确执行。
使用的时Access2000数据库。请各位高手指教。
分不够再加!
...全文
42 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
五行缺钱 2003-06-20
  • 打赏
  • 举报
回复
算了,我还是改为使用ODBC好了,还好DAO的使用和ODBC的使用非常类似,不用改太大多代码。
wulei_0_0 2003-06-13
  • 打赏
  • 举报
回复
up
五行缺钱 2003-06-13
  • 打赏
  • 举报
回复
to flyfeel(图灵)
我想过这个问题,所以我在自建的线程中和线程外访问数据库时都用了临界区,但是还是不行。
pling 2003-06-12
  • 打赏
  • 举报
回复
UP
五行缺钱 2003-06-12
  • 打赏
  • 举报
回复
我试过,在每一个线程中都建立一个数据库的实例,那就会在建立第二个实例时打开数据库异常,也出现同样的异常。
阿强 2003-06-12
  • 打赏
  • 举报
回复
是不是真的up有份?
flyfeel 2003-06-12
  • 打赏
  • 举报
回复
Access数据库有共享锁,不允许你同时对某条记录操作的。
你还是采用临界区,只允许某一时刻只有一个线程可以访问数据库。
大型数据库平台是有连接数限制的,你的应用程序同时打开多个连接这种设计不好。
网络数据库平台一般只能判断某个客户端上的某个进程的数据库连接,从而实现回话和锁机制。一个进程内多个线程的数据库连接,问题比较多。。。。
五行缺钱 2003-06-12
  • 打赏
  • 举报
回复
提前一下
zhayj 2003-06-11
  • 打赏
  • 举报
回复
up
commandos 2003-06-11
  • 打赏
  • 举报
回复
up
qinghero 2003-06-11
  • 打赏
  • 举报
回复
up
csdn95566 2003-06-11
  • 打赏
  • 举报
回复
每个线程里面要用一个单独的连接。
五行缺钱 2003-06-11
  • 打赏
  • 举报
回复
如果我把打开数据库的那部分代码放到线程中,这样可以正确执行,但是如果我在程序的其它地方要打开操作数据库时,就会在打开数据集时出同样的错。

4,012

社区成员

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

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