var
 i:integer;
......
    for i:=1 to 库存量 do
    begin
    with query do
    ......加或减任你......
    end;

解决方案 »

  1.   

    我以前曾用VB+SQLSERVER 2000做过一个进销存系统,刚开始时是每发生一笔业务后就立即从库存中将数量减除,但后来发现在更改单据时,更新数据库时经常只更新到业务库而库存表中的数量更新有时失败,造成数据不正确,后来改用视图来处理,就是发生业务时将明细记录在明细表中,而不更新库存表,查询库存时,用视图来处理,即用上期库存加减本期业务收发数来求得当前库存,然后在每月底月结一次,将当前库存写为上期库存即可,可以很好地处理这个问题,我现在改用DELPLI。
      

  2.   

    如果有需要,我可EMAIL一个简单的SQL例子给你。我的EMAIL:[email protected]
      

  3.   

    如果用的是SQL SERVER或其他的关系型数据库,可以考虑用触发器,给你一个例子:
    CREATE TRIGGER [tri_delete_inrec] ON [dbo].[InRecord] 
    FOR DELETE 
    AS
    declare @PartCode int,@Number float
    declare delete_cursor cursor for select PartCode,InNumber from deleted
    open delete_cursor
    fetch next  from delete_cursor into @PartCode,@Number
    while @@fetch_status=0
    begin
    update part set Currentstorage=CurrentStorage-@Number where PartCode=@PartCode
    fetch next  from delete_cursor into @PartCode,@Number
    end
    close delete_cursor
    deallocate delete_cursorgo
    CREATE TRIGGER [tri_insert_inrec] ON [dbo].[InRecord] 
    FOR INSERT
    AS
      Declare @InNumber float,@PartCode int
     if @@rowcount>0 
      declare insert_cursor cursor for select PartCode,InNumber from inserted
      open insert_cursor
      fetch next from insert_cursor into @PartCode,@InNumber
      while @@fetch_status=0
      begin
        update part set part.CurrentStorage=part.CurrentStorage+@InNumber
            where part.PartCode=@PartCode
        fetch next from insert_cursor into @PartCode,@InNumber   
      end
      close insert_cursor
      deallocate insert_cursorgo
    CREATE TRIGGER [tri_update_inrec] ON [dbo].[InRecord] 
    FOR UPDATE
    AS
     Declare @NewNumber float,@OldNumber float,@OldPartCode int,@NewPartCode int
     if update(innumber) or update(PartCode)
      begin
        declare update_cursor cursor for select  i.PartCode as NewPartCode,d.PartCode as OldPartCode,i.innumber as newnumber,d.innumber as OldNumber from inserted i ,deleted  d where i.InRecordID=d.InRecordID
        open update_cursor
        fetch next from update_cursor into @NewPartCode,@OldPartCode,@NewNumber,@OldNumber
        while @@fetch_status=0
        begin
          update part set CurrentStorage=CurrentStorage+@NewNumber where PartCode=@NewPartCode
          update part set CurrentStorage=CurrentStorage-@OldNumber where PartCode=@OldPartCode
          fetch next from update_cursor into @NewPartCode,@OldPartCode,@NewNumber,@OldNumber
        end
        close update_cursor
        deallocate update_cursor
      end
      

  4.   

    在实现edit功能的button事件时,将原单据数量查询出来付给一个private变量
    在实现sure功能的button事件时,将总量-private变量+现在数量得出新的总量
    这好象是最简单的方法,但不知道是不是适合你的系统.
    打印完后自动减好象并不是很难实现呀.只是看你需要在哪里实现了.