procedure TMainForm.DeleteClick(Sender: TObject);
var
DelId : integer;//当前删除的记录的ID号
begin
//将所有记录的ID号码减1
DelId:=DM.ADODataSet1['id'];
DM.AdoDataSet1.Delete;
with DM.ADOQueryTxl DO
     begin
     Close;
     Sql.Clear;
     Sql.Add('update txl set id=id-1 where id>:DelId');
     open;
     end;
end;记录1,2,3,4,5,6,7,8,9,10
当把6记录删除后,把6以后的记录向前移动,原来的7,8,9,10变成6,7,8,9
但是上面的代码好像有问题,好像是SQL语句有点问题,大家帮我看看。谢!

解决方案 »

  1.   

    with DM.ADOQueryTxl DO
    begin
         Close;
         Sql.Clear;
         Sql.Add('update txl set [id]=[id]-1 where [id]>:DelId');
         Parameters.ParamByName('DelId').Value = DelId;
         ExecSQL;
    end
      

  2.   

    with DM.ADOQueryTxl DO
    begin
         Close;
         Sql.Clear;
         Sql.Add('update txl set id=ID-1 where id>:DelId');
         Parameters.ParamByName('ID').Value:=FieldbyName('id').Value; 
         Parameters.ParamByName('DelId').Value:= Edit1.text(根据实际情况:p)
         ExecSQL;
    end
      

  3.   

    哦,不好意思,
    上面的SQL语句改为'update tx1 set id=:ID whereid>:DelId';
    'Parameters.Parambyname('ID').Value:=Fieldbyname('id').value-1;
      

  4.   

    对于插入,更新应该使用ExecSQL,而不是OPEN,OPEN是为了拿回数据集使用。
      

  5.   

    update 语句执行的时候,怎么是用Open呢?
    应该用ExecSQ呀!
      

  6.   

    procedure TMainForm.DeleteClick(Sender: TObject);
    var
    DelId : integer;//当前删除的记录的ID号
    begin
    //将所有记录的ID号码减1
    DelId:=DM.ADODataSet1['id'];
    DM.AdoDataSet1.Delete;
    with DM.ADOQueryTxl DO
         begin
         Close;
         Sql.Clear;
         Sql.Add('update txl set id=id-1 where id>:DelId');
         ExecSQL;
         end;
    end;
      

  7.   

    问题的关键是open 与execsql的区别问题,告诉你在运用select 时可以用open其他的如update,insert into,delete 等用execsql另外你的程序科写为:
    procedure TMainForm.DeleteClick(Sender: TObject);   
    var
    DelId : integer;//当前删除的记录的ID号
    begin
    //将所有记录的ID号码减1
    DelId:=DM.ADODataSet1['id'];
    DM.AdoDataSet1.Delete;
    with DM.ADOQueryTxl DO
         begin
         Close;
         Sql.Clear;
         Sql.Add('update txl set id=id-1 where id>:DelId');
         ExecSQL;
         end;
    end;