读写都没问题。现在是如果客户端读的时候 ,网站也在操作。可能会造成数据不完整或者其他意想不到的问题。有没有什么方法解决这个? 我用ado 连接 mysql

解决方案 »

  1.   

    这么着, 客户端的任务是从数据库中读出字段值,并自动对值加一写回。
    同事,网页也有加一写入行为。 
    不确定什么时候会触发。 所以,发生碰车(都同时写入)  就会产生我预想的问题……数据库没法换了,必须用mysql。  
    兄弟们有没有经验?
      

  2.   

    自动对值加一写回,都仅仅使用sql:update tbxxx set fxx=fxx+1 where ...
    而不能使用xxx.fields[i].asinteger:=xxx.fields[i].asinteger+1;
      

  3.   

    使用xxx.fields[i].asinteger:=xxx.fields[i].asinteger+1;
    打开的时候,xxx.fields[i].asinteger当时为100
    网页可能加了几次,改为105了
    而使用xxx.fields[i].asinteger:=xxx.fields[i].asinteger+1;又把它改为101了!update语句,则始终是对最新的值(105)再加一
      

  4.   

    解法就是
    都使用sql:update tbxxx set fxx=fxx+1 where ...
    而不能使用xxx.fields[i].asinteger:=xxx.fields[i].asinteger+1;
      

  5.   

    sql:update tbxxx set fxx=fxx+1 where ...
    对Image数据不能更新 
      

  6.   

    【这么着, 客户端的任务是从数据库中读出字段值,并自动对值加一写回。
    同事,网页也有加一写入行为。  
    不确定什么时候会触发。 所以,发生碰车(都同时写入) 就会产生我预想的问题……】Image数据会加一写回
      

  7.   

    查找一下乐观锁!
    解决办法一般有二种:时间戳或版本号(即在数据库中加一个字段)由于ADO这个东西在查询完数据后会把数据放到本地的缓存中,所以当网站与D端同时访问数据后,会在缓存中存一些映像数据。当二个以上客户端在进行更新数据时,往往后更新的动作会把先更新的数据给覆盖掉。基于这个原因,可以在字段后加一个标识,来标识这个记录的版本信息,当数据在网站端被更新后,版本号加1.这时Delphi端也要提交时,就应该先装载记录,判断当前数据库中的版本是否与本地内存的一致。不一致的话,重新LOAD。