我的数据库是MySQL5.0,ODBC用的是MySQLODBC 3.51。
可是在开发时发现一个问题,如果ADOQuery在取数据和Post之间正好有人修改
了服务器上的同一条数据,那么Post就会出现“无法为更新定位行,一些值可
能已在最后一次读取后被修改”,我查了一下,在SQLServer下,可以将ADOQuery
的CursorLocation设置成clUseServer,就可以解决这个问题,但MySQL设置时
报错“Database does not suport book"之类的错,反正就是不支持
clUseServer。请问如何解决这个问题
1、请不要告诉我,在Post之前Refresh,这样用户的输入不是丢失了吗
2、请不要告诉我,自己拼Update的SQL语句来更新数据库,这样太麻烦而且表很多
3、请不要告诉我,用事务捕捉Exception并回滚,因为用户没有输入错误,这些
数据是要报存的,我只用把最新的东西存进去就可以了我想问各位有什么解决方法,或者各位的MySQL是否支持clUseServer?

解决方案 »

  1.   

    ado不支持开放式并发处理,所以你也就别想着使用post来解决你的并发更新问题。
    如果使用lock table 来锁定当前用户操作的表存在着表的死锁问题。
    解决问题的唯一办法使用Update的SQL来更新用户数据。
    如果是三层的话可以再数据层自定义更新方式,和上边的方法差不多,也是那么回事。
      

  2.   

    hongqi162(失踪的月亮) ( ) 信誉:105    Blog   加为好友  2007-06-14 08:45:19  得分: 0  
       ado不支持开放式并发处理,所以你也就别想着使用post来解决你的并发更新问题。
    如果使用lock table 来锁定当前用户操作的表存在着表的死锁问题。
    解决问题的唯一办法使用Update的SQL来更新用户数据。
    如果是三层的话可以再数据层自定义更新方式,和上边的方法差不多,也是那么回事。
    =====================================================================
    多谢你的回答,不过我想你误解我的意思了,我不是要解决并发更新问题,只要实现最后
    一个人的修改正确的存在数据库里就可以了,之前的其它人的修改可以被覆盖。我试过,ADOQuery连SQLServer时,用clUseServer模式就可以实现我的效果,但MySQL不
    知道为什么不能用clUseServer模式(但MySQL的官方网站又说是支持的)  
     
      

  3.   

    你打一下Delphi7 Update1看看