X3平台分为 客户端 应用服务器 数据库服务器,数据都是存放在数据库服务器,客户端发数据请求到应用服务器,由应用服务器发SQL语句到数据库服务器,获取数据后,返回给客户端。数据在客户端是以数据集的方式来组织和维护的。理解数据集,对于理解客户端编程就非常重要了。

1. 激活数据集

数据集默认处于关闭状态,没有从服务器获取数据,此时数据集中没有数据,当数据集处于打开状态(DataSet.Active=True)时候,才会从服务端获取到需要的数据。

1.1. 相关属性和方法

1.2. 激活数据集的方法

  1. DataSet.Active := True;

  2. DataSet.Open;

1.3. 关闭数据集的方法

  1. DataSet.Active := False;

  2. DataSet.Close;

2. 数据集状态

数据集有三种状态:浏览、编辑、新增。数据集打开时候,处于浏览状态,在浏览状态下不可以修改字段的值,只有让数据集处于编辑状态或者新增状态才可以修改字段的值。

2.1. 相关属性和方法

2.2. 修改字段的值

   1 //修改数据集状态,让数据集处于新增状态.
   2 DataSet.Edit;
   3 //修改字段的值.
   4 DataSet.FieldByName('ZD1').AsString := 'test';
   5 //确认修改,让数据集回到浏览状态.
   6 DataSet.Post;

2.3. 新增一条记录

   1 //修改数据集状态,让数据集处于新增状态.
   2 DataSet.Append;
   3 //对每一个字段赋值.
   4 DataSet.FieldByName('ZD1').AsString := 'test';
   5 DataSet.FieldByName('ZD2').AsString := 'test';
   6 DataSet.FieldByName('ZD3').AsString := 'test';
   7 //确认新增,让数据集回到浏览状态.
   8 DataSet.Post;

3. 数据集增删改

3.1. 相关属性和方法

4. 数据集的遍历

客户端的数据集一次只能修改一条记录,不能同时修改多条记录。可以被修改的记录是数据集的当前记录,如果需要修改多条记录,就要不断的滚动数据集,让需要修改的记录变成当前记录来修改。

4.1. 相关属性和方法

   1 //定位到数据集的第一条记录.
   2 DataSet.First;
   3 while not DataSet.Eof do
   4 begin
   5   DataSet.Edit;
   6   //修改字段的值.
   7   DataSet.FieldByName('ZD1').AsString := 'test';
   8   DataSet.Post;
   9   //滚动到下一条记录.
  10   DataSet.Next;
  11 end;

5. 更新数据集

5.1. 相关属性和方法

以上给出的方法都是修改本地数据集的数据,并没有把修改提交给服务端,提交给服务端,需要调用DataSet.ApplyUpdates

   1 //定位到数据集的第一条记录.
   2 DataSet.First;
   3 while not DataSet.Eof do
   4 begin
   5   DataSet.Edit;
   6   //修改字段的值.
   7   DataSet.FieldByName('ZD1').AsString := 'test';
   8   DataSet.Post;
   9   //滚动到下一条记录.
  10   DataSet.Next;
  11 end;
  12 //提交修改到服务端.
  13 DataSet.ApplyUpdates;

6. 性能考虑

  1. 数据集的每一次滚动或者修改都会通知关联的控件,以做显示表现数据的变化,如果有遍历数据集等大量的数据集动作,需要在之前调用DisableControls方法让数据感知控件不作变化,只有当执行EnableControls之后才体现数据集的变化。

  2. 有批量数据修改时,批量的在客户端修改数据,最后统一调用一次ApplyUpdates来提交给服务器,而不要每一条记录修改都提交。

6.1. 相关属性和方法

   1 DataSet.DisableControls;
   2 try
   3   //定位到数据集的第一条记录.
   4   DataSet.First;
   5   while not DataSet.Eof do
   6   begin
   7     DataSet.Edit;
   8     //修改字段的值.
   9     DataSet.FieldByName('ZD1').AsString := 'test';
  10     DataSet.Post;
  11     //滚动到下一条记录.
  12     DataSet.Next;
  13   end;
  14   //提交修改到服务端.
  15   DataSet.ApplyUpdates;
  16 finally
  17   DataSet.EnableControls;
  18 end;


数据集类

数据集 (last edited 2007-12-03 11:05:40 by alang)