我的数据库中存在商品资料,仓库资料,入库数量,出库数量
然后我显示的结构是:
商品资料   仓库   入库数量   出库数量   当前库存(我摄制的是计算型)
Nokia7200  主仓库    100         0          100
Nokia7200  主仓库     0          20         80
Nokia7200  主仓库    10          0          90
Nokia7200  主仓库    0           10         80
Nokia7200  主仓库    0           10         70
Nokia7200  主仓库    0           26         44
Nokia7200  主仓库    0           16         10
Nokia7200  主仓库    0           10         0现在我已经实现了,但是当数据量很大的时候速度总是很慢,大家看看有什么好的办法,给点建议,
我以前实现的办法是:(我显示的时候也需要显示行号所以加上了ID)
Procedure TDM_ResAccount.qry_ResAccountDetailCalcFields(DataSet: TDataSet);
Var
  qryTemp: TADOQuery;
  a: double;
Begin
  // Inc(tt);
  With DataSet Do
  Begin
    If DataSet.RecNo > 0 Then
      FieldByName('ID').AsInteger := RecNo
    Else
      FieldByName('ID').AsInteger := 1;
    qryTemp := TADOQuery.Create(Self);
    qryTemp.Clone(TADOQuery(DataSet));
    With DataSet Do
    Begin
      With qryTemp Do
      Begin
        first;
        a := 0;
        While Not Eof Do
        Begin
          a := a + FieldByName('InNumber').AsFloat -
            FieldByName('OutNumber').AsFloat;
          If RecNo = DataSet.FieldByName('ID').AsInteger Then
            break;
          Next;
        End;
      End;
      FieldByName('Remain').AsFloat := a;
    End;
    qryTemp.free;
  End;
End;

解决方案 »

  1.   

    最好在SQL中用触发器处理,每进、出一笔数据直接把当前库存算出来,一劳永逸你那样处理,数据量很大的时候速度总是很慢,而且每次查询时都要去重复计算,效率低而且浪费资源
      

  2.   

    --如果你的数据库中已经有: 商品资料,仓库资料,入库数量,出库数量
    --需要按记录顺序计算当前库存,则在数据库中直接这样算就行了declare @i decimal
    set @i=0
    update 表 set @i=@i+入库数量-出库数量,当前库存=@i