数据保存时的问题???
我的一个数据保存程序如下,数据量较量,有时会出现重复执行的问题,请问如何改进?
with adoq1 do
begin
close;
sql.clear;
sql.add( 'select yid,数量 from 表1 ');
open;
first;
for i:=0 to recordcount-1 do
begin
with adoq2 do
begin
close;
sql.clear;
sql.add( 'update 表2 set 数量=数量-:sl where yid=:yid ');
Parameters.ParamByName( 'yid ').Value:=adoq1.Fields[0].AsInteger;
Parameters.ParamByName( 'sl ').Value:=adoq1.Fields[1].Asfloat;
execsql;
close;
end;{with adoq2}
adoq1.next;
end;{for}
adoq1.close;
end;{with adoq1}
程序运行基本上都正常,但出现过几次,数据重复执行了比如yid为了22的商品本身应减数量为5但运行后却减了两次即10的现象,请问如何改进?或者有何好办法??
[解决办法]
with adoq1 do
begin
close;
sql.clear;
sql.add( 'select yid,? from 1 ');
open;
first;
while not eof() do
begin
with adoq2 do
begin
close;
sql.clear;
sql.add( 'update 2 set ?=?-:sl where yid=:yid ');
Parameters.ParamByName( 'yid ').Value:=adoq1.Fields[0].AsInteger;
Parameters.ParamByName( 'sl ').Value:=adoq1.Fields[1].Asfloat;
execsql;
close;
end;{with adoq2}
adoq1.next;
end;{while}
adoq1.close;
end;{with adoq1}
[解决办法]
with adoq1 do
begin
close;
sql.clear;
sql.add( 'select yid,数量 from 表1 ');
open;
first;
while noe Eof do //用while循环试试
begin
adoq2.close;
adoq2.sql.clear;
adoq2.sql.add( 'update 表2 set 数量=数量-:sl where yid=:yid ');
adoq2.Parameters.ParamByName( 'yid ').String:=adoq1.FieldByName( 'yid ').AsString;
adoq2.Parameters.ParamByName( 'sl ').String:=adoq1.FieldByName( '数量 ').AsString;
adoq2.execsql;
next;
end;{while}
end;{with adoq1}