表结构如下,
CKBM,SPBM。SCRQ,PH,DJ,SL,JE
01 0001 NULL 5 20 100
01 0001 NULL 6 30 180
01 0001 NULL 5 30 150更新数据要求:以CKBM,SPBM。SCRQ,DJ,PH 为条件,SL是60
先更新第一条,如第一条中的SL比60大可以直接更新了,如不大用更新第一条后余下的40来和第二条的比对,依次类推
CKBM,SPBM。SCRQ,PH,DJ,SL,JE
01 0001 NULL 5 20 100
01 0001 NULL 6 30 180
01 0001 NULL 5 30 150更新数据要求:以CKBM,SPBM。SCRQ,DJ,PH 为条件,SL是60
先更新第一条,如第一条中的SL比60大可以直接更新了,如不大用更新第一条后余下的40来和第二条的比对,依次类推
解决方案 »
- 新增一窗体,程序启动后,同时弹出登录窗口跟新增的窗体,怎么办呀?
- 请教一SQL模糊查询问题:如何对整个数据表进行查询? (在不指定字段的前提下)
- Delphi7的Unicode问题.
- 看到网上的招骋信息后,郁闷……
- 请问在WebService结构下,服务端如何知道客户端的IP或MAC地址
- 请教:用Query查询显示的表格,更新的时候鼠标指针变为沙漏加SQL字样的样子,能改成标准沙漏吗?
- 如何对写字板操作,如对写字板中符合要求的某一行进行筛选等
- 当窗体最大化时,如何让可视化控件随之按比例最大化
- 在线等,关于radiobutton应该怎样取值?
- 有关VCL组件
- 如何用Type Library Editor给COM对象增加一个系统标准接口
- 我有个数据表记录很多。我现在用Adoquery进行查询,用什么方法使查询速度加快?
if object_id('ta') is not null
drop table ta
go
create table ta
(
id int identity(1,1),
num int not null
)
go
insert into ta (num)
select 10 union all
select 20 union all
select 30 --要减的库存数为40
update ta set num = case when (select sum(num) from ta where id<=a.id)-40<0 then 0 else (select sum(num) from ta where id<=a.id)-40 end from ta a
var
ASum :Integer;
begin
ASum := 100; //出库总数
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
if True then //如果符合出库条件
begin
if ADOQuery1.FieldByName('SL').AsInteger < ASum then
begin
ASum := ASum - ADOQuery1.FieldByName('SL').AsInteger;
ADOQuery1.Edit;
ADOQuery1.FieldByName('SL').AsInteger := 0; //更改库存
ADOQuery1.Post;
ADOQuery1.Next;
end
else
begin
ADOQuery1.Edit;
ADOQuery1.FieldByName('SL').AsInteger := ADOQuery1.FieldByName('SL').AsInteger - ASum; //更改库存
ADOQuery1.Post;
Exit;
end;
end
else
ADOQuery1.Next;
end;
end;