str1:='select iif(isnull(sum(enterwh.入库数量)),0,sum(enterwh.入库数量)) as 存量1 from enterwh where 编码="'+Trim(edit1.Text)+'"';
    ADOQuery2.Close;
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Add(str1);
    ADOQuery2.Open;
    if ADOQuery2.RecordCount>0 then
     s1:=ADOQuery2.fieldbyname('存量1').asString;    str2:='select iif(isnull(sum(outwh.出库数量)),0,sum(outwh.出库数量)) as 存量2 from outwh where 编码="'+Trim(edit1.Text)+'"';
    ADOQuery2.Close;
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Add(str2);
    ADOQuery2.Open;
    if ADOQuery2.RecordCount>0 then
     s2:=ADOQuery2.fieldbyname('存量2').asString;    str3:='select 编码,名称,规格型号,数量 as 库存量 from stock where 编码="'+Trim(edit1.Text)+'"';
    ADOQuery2.Close;
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Add(str3);
    ADOQuery2.Open;
    if ADOQuery2.RecordCount>0 then
    begin
    temp:=ADOQuery2.fieldbyname('库存量').asString;
    Edit5.Text:=IntToStr(StrToInt(temp)+StrToInt(s1)-StrToInt(s2));
    end;两头省有语句,主要意思就是把入库表和出库表对应编码的数量合计下,然后拿基本表里同一编码的数量+入库表的数量和-出库表的数量和=这个编码物品的现存量,希望一句求出来
我原来是这样写的:
str:='select stock.名称,stock.规格型号,stock.编码,'
       +'(stock.数量+iif(isnull(sum(enterwh.入库数量)),0,sum(enterwh.入库数量))-iif(isnull(sum(outwh.出库数量)),0,sum(outwh.出库数量))) as 库存量'
       +' from (stock LEFT JOIN outwh ON (stock.编码=outwh.编码))'
       +' LEFT JOIN enterwh ON (stock.编码=enterwh.编码)'
       +' where 编码="'+Trim(edit1.Text)+'"'
       GROUP BY stock.编码,stock.名称,stock.规格型号,stock.数量';
这样的话如果出入库里都是对应一条记录的话还可以,要是对应多条就会出错,会出现重复加减操作
麻烦各位了
delphi+access

解决方案 »

  1.   

    本人已经自行解决,那就在二楼再问个小问题,解决的散分关于出入库,算库存的例子,一种是把出库,入库每一单都列出来,要库存时就用查询统计下出库多少,入库多少,加减就得到库存
    第二种想法是,设个实时表,出时直接在对应的上面减去,入时直接在对应的上面加上,实时表始终显的就是库存但这两种方法都有些问题不好解决,第一种是在出入库数据N多的情况下,统计就显的慢了很多,每次打开库存查询就越来越慢,第二种呢,如果我有次出入库错了,要修改出入库的数据时,要么要删除某一条出入库数据,就得实现更新实时表,这样就难免出错不知道大家对以上两种方法有没有更好的解决办法,本人新手,希望大家给个思路,代码均可
      

  2.   

    1.其实只要是有关库存的软件,都有这个报表的,列出入库与出库的明细,数据多的话,可以限定他只能查某一个产品或者某个时间段2.库存表加一个库存量的字段,出/入库时就统计出最后的库存回写到此字段,查库存时就直接查库存表,
    但出错是难免的,要看你如何统计了,只要保证正常操作下正确即可,有错就根据第1个报表去检查了
      

  3.   

    如果出入库表用触发器,就不存在库存不正确的问题。
      

  4.   

    1 出入库表必须有, 因为要存放出入库单据备查,还有红冲等情况都需体现
    2 实时库存表,看数据量大小和操作频率, 可以通过出入库表或台账建视图, 或独立建表