Embarcadero RAD Studio XE

Navigating and Editing a ClientDataSet

I. 使用TClientDataSet單步走訪資料表格

程式碼 專案檔下載

unit Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, SqlExpr, Data.DBXMSSQL, Data.FMTBcd,
  Datasnap.Provider, Data.DB, Vcl.StdCtrls, DBClient;

type
  TForm1 = class(TForm)
    WellsnameConnection: TSQLConnection;
    UsernameTable: TSQLDataSet;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    ClientDataSet1: TClientDataSet;
    DataSetProvider1: TDataSetProvider;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if ClientDataSet1.RecNo <  ClientDataSet1.RecordCount then begin
    ClientDataSet1.Next;
    Label1.Caption := ClientDataSet1.FieldValues['Name'];
  end;
end;

procedure TForm1.Button2Click(Sender : TObject);
begin
   if ClientDataSet1.RecNo > 0 then begin
    ClientDataSet1.Prior;
    Label1.Caption := ClientDataSet1.FieldValues['Name'];
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  ClientDataSet1.Last; Label1.Caption := ClientDataSet1.FieldValues['Name'];
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  ClientDataSet1.First; Label1.Caption := ClientDataSet1.FieldValues['Name'];
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
     Label1.Caption := ClientDataSet1.Fields[1].Value;
end;

end.

II. 其他操作ClientDataSet的程式碼

走訪整個資料表格

procedure TForm1.Button1Click(Sender:TObject);
begin
if not ClientDataSet1.Active then ClientDataSet1.Open;
ClientDataSet1.First;
while not ClientDataSet1.EOF do
begin
  //移至下一筆資料
  ClientDataSet1.Next;
end;
end;

III. 編修資料表格

insertRecord用來插入一筆資料到表格中:

procedure InsertRecord(const Values: array of const);

程式範例:

ClientDataSet1.InsertRecord([1001, null, 'new']);

IV. 另一種編輯資料的方式:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not ClientDataSet1.Active then ClientDataSet1.Open;
  ClientDataSet1.First;
  while not ClientDataSet1.EOF do
  begin
    try
      ClientDataSet1.Edit; //進入編輯模式
      try
        ClientDataSet1.Fields[0].Value :=
                UpperCase(ClientDataSet1.Fields[0].Value);
        ClientDataSet1.Post; //將結果送出
      except
        //修改資料送出發生例外,取消
        ClientDataSet1.Cancel;
      end;
    except
      //Record cannot be edited. Skip 資料不能編輯,skip
    end;
    ClientDataSet1.Next;
  end; //while
end;

V. 其他操作方法

  • MoveBy, 移動資料,例: MoveBy(10), MoveBy(-2)
  • RecNo,目前資料錄號碼
  • First,移到第一筆
  • Last,移到最後一筆
  • Next,往下移一筆
  • Prior,往上移一筆