DAO不是线程安全的,你不能在多线程程序中使用DAO操作数据库。

解决方案 »

  1.   

    但是我没有在多个线程中使用一个DAO连接
    而是在一个线程中打开一个DAO连接,然后关闭
    主线程不也是一个线程吗?同工作线程有什么不同吗?
      

  2.   

    建议不要跨线程进行DAO操作,如果确有必要,使用之前使用同步对象加锁以确保同一时刻只有一个线程进行DAO操作。
      

  3.   

     我在每次重新使用数据库时和程序退出时重新初始化DAO
    AfxDaoInit();
    非法操作就没有了
    可能是关闭数据库时资源释放问题
    但是用close()方法关闭不彻底吗?
    参考 http://www.codeguru.com/mfc_database/dao_multithreading.shtml
      

  4.   

     是啊。 我也有同样的问题。 
     试试 db.mpDaoWorkSpasce->Clsoe();
      

  5.   

    就是在 CDaoDatabase close 之前先把 它的
    Workspace 给close 一下
      

  6.   

    to ipxspx(ipxspx):
     我的问题和你相反, 我是调用了AfxDaoInit()的话就会” 非法操作“
      

  7.   

    to vlmf(反恐精英)
    为什么WorkSpasce要在Database关闭之前关闭呢?
    一般应该先关闭Database在关闭WorkSpasce
    WorkSpasce要在Database关闭之前关闭,这样在Database关闭时会不会出问题呢?
      

  8.   

    有谁知道那里有操作DBF文件(或其他数据库格式)的API,功能不必特别强大,支持简单的SQL语句即可.不过功能也别太弱了,支持多线程最好,最好是源代码或Lib库(比较成熟的正式版),不要是DLL,不想象DAO似的用DLL
      

  9.   

    to ipxspx:
       没有问题的。create的时候不是应该先建立Workspace吗!
     还有你要的dbf文件的东东我也想要一分,我在网上找过但是没有找到,你找到的
    话给我一分好吗。 [email protected], 谢谢了!
      

  10.   

    还有,程序退出的时候会调用AfxDaoTerm.之后的DAO操作会出错(比如全局对象的析构)