开了好几个线程,他们都要求在同一时刻对同一个表进行操作(对某一个用户扣钱,扣完再update一下),结果就是报错,报错的小窗口只有一个黄色的叹号,以工程名作为标题,其余什么提示也没有,结果扣的钱就是不对,少扣了很多钱。
    我用的是CRecordSet类派生的类,数据源是ODBC.SQLServer
各位大虾,我该怎么办啊?

解决方案 »

  1.   

    使用事务,检查代码。看看Update时出了什么差错
      

  2.   


    同进程的线程做互斥, 不同进程的UPDATE加行锁
      

  3.   

    这是一个锁的粒度的问题,显然锁住一整个表是不现实的,但是你可以锁住你正在操作的那一条记录。
    update 之前可以用一条:EnterCriticalSection();
    //update here...
    LeaveCriticalSection();
      

  4.   

    同意roscoe(草上飞)
    方法: djfu(一马平川)
    我想问一下,是两个CONNECTION对两个RECORDSET好呢 还是一个CONNECTION对应两个RECORDSET好些?
      

  5.   

    多谢楼上的诸位兄弟们给我的帮助,我最后抛弃了CRecordset提供的各种函数,直接就用数据库对象m_pDatabase->ExecuteSQL(strSQL),我对程序做了各种变态的折磨试验,程序和数据库没有什么再发表什么意见。我想就这样用应该没什么问题的吧!    如果大家对我的做法还有什么看法,麻烦您一定要说,如果没有的话我元旦前夜结贴。顺便祝大家:
          元旦快乐,不用加班,发过一笔过节费!睡个好觉!