大家帮忙看下。我这段while语句哪里有问题?我执行的之后数量就变成0了,没有去做减法。         
             jtbzqty.open;
             n:=aqbzqty.fieldbyname('FQty').asinteger;
             jtbzqty.first;
              while(( n>0)and not jtbzqty.eof)
               do begin
                if( n<jtbzqty.fieldbyname('FQty').asinteger)then begin
                 jtbzqty.edit;
           jtbzqty.fieldbyname('FQty').asinteger:=jtbzqty.fieldbyname('FQty').asintegern;                  
                 jtbzqty.post;
                  end
                else
               begin  
                jtbzqty.edit;
                jtbzqty.fieldbyname('FQty').asinteger:=0;
                jtbzqty.post;
                n:=n-jtbzqty.fieldbyname('FQty').asinteger;
                jtbzqty.next;
               end;
              end;
               label2.caption:='正常,已录入。';
                end
      else
              label2.caption:='数据异常,未能存入!!!';
             edtBarCode.SelectAll;

解决方案 »

  1.   

    整理了下你代码的对齐:
      jtbzqty.open;
      n:=aqbzqty.fieldbyname('FQty').asinteger;
      jtbzqty.first;
      while(( n>0)and not jtbzqty.eof) do begin
        if( n<jtbzqty.fieldbyname('FQty').asinteger)then begin
          jtbzqty.edit;
          jtbzqty.fieldbyname('FQty').asinteger:=jtbzqty.fieldbyname('FQty').asintegern;
          jtbzqty.post;
        end
        else begin
          jtbzqty.edit;
          jtbzqty.fieldbyname('FQty').asinteger:=0;//这里赋值为 0 了
          jtbzqty.post;
          n:=n-jtbzqty.fieldbyname('FQty').asinteger;//用 n 去减 0 干什么呢?
          jtbzqty.next;
        end;
      end;
      ......
      

  2.   

    ......
      if( n<jtbzqty.fieldbyname('FQty').asinteger)then begin
      jtbzqty.edit;
      jtbzqty.fieldbyname('FQty').asinteger:=jtbzqty.fieldbyname('FQty').asintegern;//为何自己等于自己?(代码出了问题,最好是将代码复制出来,而不是手工输入)   
      jtbzqty.post
    ......
      

  3.   

    你是否想得到下面的效果啊:var x: integer;
    begin
      ......
      jtbzqty.open;
      n:=aqbzqty.fieldbyname('FQty').asinteger;
      jtbzqty.first;
      while((n>0) and not jtbzqty.eof) do begin
        x:=jtbzqty.fieldbyname('FQty').asinteger;
        jtbzqty.edit;
        if n < x then begin //存量够减:
          jtbzqty.fieldbyname('FQty').asinteger:=jtbzqty.fieldbyname('FQty').asinteger-n
        else                //存量不够减:
          jtbzqty.fieldbyname('FQty').asinteger:=0;
        jtbzqty.post;
        n := n - x;
        jtbzqty.next;
      end;
      ......
    end;