我想要删除表里的一条记录,删除了以后再把下面的序号逐一的减一,但为什么他运行了以后不减?源程序如下:
procedure Tdhdform.Button2Click(Sender: TObject);
var
aa:array[0..5] of integer;
begin
query1.close;
query1.sql.Clear;
query1.SQL.add('select * from dhd where ddh='''+edit1.text+'''');
query1.Open;
aa[0]:=query1.fieldvalues['xh'];
if query1.Eof and query1.Bof then
begin
showmessage('找不到这条记录!');
query1.close;
query1.sql.Clear;
query1.SQL.add('select * from dhd');
query1.Open;
aa[1]:=query1.RecordCount;
end
else
begin
if messagedlg('真的要删除这条记录吗?',mtconfirmation,[mbyes,mbno],0)=mryes then
begin
query1.close;
query1.sql.Clear;
query1.sql.Add('delete from dhd where ddh='''+trim(edit1.text)+'''');
query1.execsql;
while aa[0]<aa[1] do
begin
query1.close;
query1.sql.Clear;
query1.sql.Add('update dhd set xh=aa[0] where xh=aa[0]+1');
query1.execsql;
aa[0]:=aa[0]+1;
end;
query1.Prepare;
query1.close;
query1.sql.Clear;
query1.sql.Add('select * from dhd order by xh');
query1.Open;
showmessage('你已经成功删除了这条记录!');
end
else
begin
query1.close;
query1.sql.Clear;
query1.sql.Add('select * from dhd order by xh');
query1.Open;
end;
end;
end;

解决方案 »

  1.   

    aa[1]:=query1.RecordCount;
    放再
    if messagedlg('真的要删除这条记录吗?',mtconfirmation,[mbyes,mbno],0)=mryes then
    前面
      

  2.   

    添加一个全局变量(iID)用于记录当前要删除的序号。
    在Query的BeforeDelete事件中写入 :
    iID := Query.FieldByName('xh').AsInteger;
    在Query的AfterDelete事件中写入:
    with Query do
    begin
      Close;
      SQL.Clear;
      SQL.Add('update dhd set xh = '''+IntToStr(XH-1)+'''');
      SQL.Add('where XH > '''+IntToStr(iXH)+'''');
      Execsql;
    end;
      

  3.   

    不一样的  我的意思是指 连同
    query1.close;
    query1.sql.Clear;
    query1.SQL.add('select * from dhd');
    query1.Open;
    和aa[1]:=query1.RecordCount;
    都放再 
    if messagedlg('真的要删除这条记录吗?',mtconfirmation,[mbyes,mbno],0)=mryes then 的前面
    不信 你可以试一试