首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

数据保存时的有关问题?

2012-03-13 
数据保存时的问题???我的一个数据保存程序如下,数据量较量,有时会出现重复执行的问题,请问如何改进?withad

数据保存时的问题???
我的一个数据保存程序如下,数据量较量,有时会出现重复执行的问题,请问如何改进?
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}

热点排行