想实现将指定的数据行上行一行,如果操作,排序完成后最后UpdateBatchvar  ADOSetTmp: TADODataSet;
     i:int64;
begin
i:=1;
    ADOSetTmp := nil;
    ADOSetTmp := TADODataSet.Create(ADOSetTmp);
    ADOSetTmp.CommandText := 'select max(xh) as num from TBA_PZ where mc='''+zw_para1+''' and id<'+inttostr(ADOQuery1.FieldByName('id').AsInteger);
    ADOSetTmp.Connection := data1.ADOConnection1;
    ADOSetTmp.Open;
    if  ADOSetTmp.FieldByName('num').Value<>null then
    begin
        i:= ADOSetTmp.FieldByName('num').Value;
              ADOQuery1.edit;
             ADOQuery1.FieldByName('xh').Value:=i;
             end;
    ADOSetTmp.Free;实现了将指定行的排序号xh-1,但是如何将上一行的xh+1这样才正确呀

解决方案 »

  1.   

    我得办法
    四个变量 sID(原id),dID(目标id),sXH(原序号),dXH(目标序号):integer现分别取得 sID和dID,现在要将dID的数据和sID记录序号做交换
    假如现在数据记录在dID上,取出dXH,数据上移Prior,取得sXH
    DisableControls;
    Edit;
    FieldByName('xh').AsInteger := dXH;//修改sID记录序号为dXH
    Post;下移
    Next;
    Edit;
    FieldByName('xh').AsInteger := sXH;//修改dID记录序号为sXH
    Post;
    EnableControls;
      

  2.   

    //xh-1
    ADOSetTmp.CommandText := 'select max(xh) as num from TBA_PZ where mc='''+zw_para1+''' and id <'''+ADOQuery1.FieldByName('id').AsString+''''; 
      
    //xh+1
    ADOSetTmp.CommandText := 'select min(xh) as num from TBA_PZ where mc='''+zw_para1+''' and id >'''+ADOQuery1.FieldByName('id').AsString+''''; 
      

  3.   

    是可以,那如何在没有UpdateBatch之前数据行就上移一行
      

  4.   

    var  ADOSetTmp: TADODataSet;
         i,j:int64;
    begin
    ADOQuery1.DisableControls;
    i:=1;
    j:=1;
        ADOSetTmp := nil;
        ADOSetTmp := TADODataSet.Create(ADOSetTmp);
        ADOSetTmp.CommandText := 'select max(xh) as num from TBA_PZ where mc='''+zw_para1+''' and id<'+inttostr(ADOQuery1.FieldByName('id').AsInteger);
        ADOSetTmp.Connection := data1.ADOConnection1;
        ADOSetTmp.Open;
        if  ADOSetTmp.FieldByName('num').Value<>null then
        begin
            j:=ADOQuery1.FieldByName('xh').Value;
            i:= ADOSetTmp.FieldByName('num').Value;
                ADOQuery1.edit;
                ADOQuery1.FieldByName('xh').Value:=i;
                ADOQuery1.Prior;
                ADOQuery1.edit;
                ADOQuery1.FieldByName('xh').Value:=j;
        end;
        ADOQuery1.EnableControls;
        ADOSetTmp.Free;
        ADOQuery1.UpdateBatch;
        ADOQuery1.Close;
        ADOQuery1.Open;
    end;
    哪错了