zoukankan      html  css  js  c++  java
  • ado数据集(断开连接)后,单条调整记录顺序

    原始地址:http://blog.csdn.net/lwm08106542000/article/details/6594183

    运行截图

    //界面中,我们有时候需要,单条调整其记录顺序,上移,或者下移动某条记录的位置

    //本文中,提供的方法,可以供参考.



    //2011-07-09 09:30

    unit uMain;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, Grids, DBGrids, ADODB;

    type
      TfrmMain = class(TForm)
        AdoConn: TADOConnection;
        adoQry: TADOQuery;
        DBGrid1: TDBGrid;
        DataSource1: TDataSource;
        Button1: TButton;
        btnUp: TButton;
        btnDown: TButton;
        procedure Button1Click(Sender: TObject);
        procedure btnUpClick(Sender: TObject);
        procedure btnDownClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      frmMain: TfrmMain;

    implementation

    {$R *.dfm}

    function adoSwapRecord(mt:TDataSet;RecNoA,RecNoB:Integer):Boolean;
     function CopyRec():TStrings;
      var
        Index:Integer;
      begin
        Result := TStringList.Create();
        for Index := 0 to mt.Fields.Count - 1 do
        begin
          if mt.Fields[Index].IsNull then
            Result.AddObject('',TObject(1001))
          else
            Result.Add(mt.Fields[Index].AsString);
        end;
      end;
     
      procedure WriteRec(Data:TStrings;Flags:string);
      var
        Index:Integer;
      begin
        for Index := 0 to mt.Fields.Count - 1 do
        begin
          if Pos(mt.Fields[Index].FieldName,Flags) > 0 then Continue;
          if Integer(Data.Objects[Index]) = 1001 then
            mt.Fields[Index].Clear()
          else
            mt.Fields[Index].AsString := Data.Strings[Index];
        end;
      end;

     function getReadOnlyFields(mt:TDataSet):string;
     var
       Index:integer;
       FD:TFieldDef;
     begin
       Result := '';
       for Index := 0 to mt.FieldDefs.Count - 1 do
       begin
         FD := mt.FieldDefs.Items[Index];
         if (faReadonly in FD.Attributes) or
            (faFixed    in FD.Attributes) or
            (FD.DataType = ftAutoInc) then
           Result := Result + ',' + FD.Name;
       end;
     end;


    var
      ItemsA,ItemsB:TStrings;
      Flags:string;// 不允许修改的字段
    begin
      Result:= (RecNoA >=1) and
               (RecNoA<=mt.RecordCount) and
               (RecNoB >=1) and
               (RecNoB<=mt.RecordCount);
      if not Result then
        Exit;
      if RecNoA = RecNoB then
        Exit;

      Flags := getReadOnlyFields(mt);

      mt.RecNo := RecNoA;
      ItemsA := CopyRec();
      mt.RecNo := RecNoB;
      ItemsB := CopyRec();

      mt.RecNo := RecNoA;
      mt.Edit();
      WriteRec(ItemsB,Flags);
      mt.Post();

      mt.RecNo := RecNoB;
      mt.Edit();
      WriteRec(ItemsA,Flags);
      mt.Post();

      ItemsA.Free();
      ItemsB.Free();

    end;

    //打开数据集
    procedure TfrmMain.Button1Click(Sender: TObject);
    var
      SQL:string;
    begin
      SQL := 'Select ID,UID,PWD,EmpName,InsertTime from a_gysuser';
      AdoConn.Connected := TRUE;
      //\\
      adoQry.SQL.Text := SQL;
      adoQry.Open();
      adoQry.Connection := nil; //断开与adoConnection 的连接
    end;

    //上移记录位置
    procedure TfrmMain.btnUpClick(Sender: TObject);
    begin
     adoSwapRecord(adoQry,adoQry.RecNo,adoQry.RecNo-1);
    end;

    //下移记录位置
    procedure TfrmMain.btnDownClick(Sender: TObject);
    begin
      adoSwapRecord(adoQry,adoQry.RecNo,adoQry.RecNo+1);
    end;

    end.

  • 相关阅读:
    用SSH指令批量修改文件夹 文件权限和拥有者
    magento转移服务器和magento建立多站点总结
    ssh 命令
    magento缓存系列详解:clean cache
    如何配置magento免运费商品方法
    Magento后台订单显示产品图片的修改方法
    如何在magento后台增加一个自定义订单状态
    Magento路径函数getBaseUrl使用方法
    图解HTTPS
    php 数组 添加元素、删除元素
  • 原文地址:https://www.cnblogs.com/mingdep/p/2343977.html
Copyright © 2011-2022 走看看