我一直做进销存,我认为这样的问题很正常,可能与数据库及死机有关,建议:1.采用仓库进出明细表记录每一笔出入和结存,这样出了问题可以查.
 表结构如下: ID 时间  商品ID  仓库ID 出入库单据类型  发生数量 单价  结存数量
 1  ...   001     1       01             100      9.3  120
 2  ...   001     1       02             21       8.6  141
 3  ...   002     1       09             -10      9.3  131   在正常情况下结存数量即为当前库存量,否则为错,如果有任何一条不符合以上三条记录的数量关系,则错.
  
2.对所有有关库存修改的操作采用事务处理,这样可防止死机和掉电造成的数据混乱.

解决方案 »

  1.   

    我一直做进销存,我认为这样的问题很正常,可能与数据库及死机有关,建议:1.采用仓库进出明细表记录每一笔出入和结存,这样出了问题可以查.
     表结构如下: ID 时间  商品ID  仓库ID 出入库单据类型  发生数量 单价  结存数量
     1  ...   001     1       01             100      9.3  120
     2  ...   001     1       02             21       8.6  141
     3  ...   002     1       09             -10      9.3  131   在正常情况下某仓某商品最后一条的结存数量即为当前库存量,否则为错,如果有任何一条不符合以上三条记录的数量关系,则错.
      
    2.对所有有关库存修改的操作采用事务处理,这样可防止死机和掉电造成的数据混乱.
      

  2.   

    看你写程序就很不规范,说不定你的ado2在哪里被用过了,然后又拿到这里来用,这样肯定会导致错误,象这种错误你没办法查,问题肯定是出在程序里,把ado2改成一个专用的,然后再观察
      

  3.   

    我觉得肯定是有bug,写一些日志看看是那笔业务出现错误的。
      

  4.   

    我修改库存表时都记录了库存更新时间,查SQL日志,没有当时的错误信息
      

  5.   

    查SQL日志没有用,要自己写对数据库操作日志,这样对数据库的每一不更新不是很清楚能查到吗
      

  6.   

    ado3.sql.add('update yfkc set number=number-'
            +ado2.fieldbyname('number').value+
            ' where ypbh='''+ado2.fieldbyname('ypbh').value+'''');
        建议把ado2.fieldbyname('xxx').value改为ado2.fieldbyname('xxx').Asstring.在SQL语句中我们要的是String型的。而value就有可能不是。
        
     
      

  7.   

    很多莫名其妙的错误都是访问的和存储的数据类型不一致引起的。如float用Currency读写。Float用String读写等都有数据误差等结果