起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 259|回复: 6

[分享]数据集

[复制链接]
发表于 2008-8-25 11:35:45 | 显示全部楼层 |阅读模式
X3平台分为 客户端 应用服务器 数据库服务器,数据都是存放在数据库服务器,客户端发数据请求到应用服务器,由应用服务器发SQL语句到数据库服务器,获取数据后,返回给客户端。数据在客户端是以数据集的方式来组织和维护的。理解数据集,对于理解客户端编程就非常重要了。

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

1.1. 相关属性和方法
property Active: Boolean;
判断数据集是否处于打开状态,True为打开状态,False为关闭状态

procedure Open;
打开数据集,打开以后,Active属性为True

procedure Close;
关闭数据集,关闭以后,Active属性为False


1.2. 激活数据集的方法
DataSet.Active := True;

DataSet.Open;


1.3. 关闭数据集的方法
DataSet.Active := False;

DataSet.Close;
回复

使用道具 举报

 楼主| 发表于 2008-8-25 15:46:12 | 显示全部楼层

数据集状态

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

1.gif

903.11 KB, 下载次数: 176

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-25 15:47:31 | 显示全部楼层
2.1. 相关属性和方法
Proerty State: TDataSetState;
数据集状态属性,可以是dsBrowse,dsInsert,dsEdit

procedure Append;
增加记录,修改数据集状态为dsInsert

procedure Insert;
增加记录,修改数据集状态为dsInsert

procedure Edit;
编辑当前记录,修改数据集状态为dsEdit

procedure Post;
提交修改或者新增的记录,修改数据集状态为dsBrowse

procedure Cancel;
取消修改或者新增的记录,取消上次执行Append或者Edit之后对字段的所有修改,修改数据集状态为dsBrowse

procedure Delete;
删除当前记录,不修改数据集的状态


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;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-25 15:49:01 | 显示全部楼层

数据集增删改

数据集增删改

3.1. 相关属性和方法
procedure Append;
增加记录,修改数据集状态为dsInsert

procedure Insert;
增加记录,修改数据集状态为dsInsert

procedure Edit;
编辑当前记录,修改数据集状态为dsEdit

procedure Post;
提交修改或者新增的记录,修改数据集状态为dsBrowse

procedure Cancel;
取消修改或者新增的记录,取消上次执行Append或者Edit之后对字段的所有修改,修改数据集状态为dsBrowse

procedure Delete;
删除当前记录,不修改数据集的状态
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-25 15:49:47 | 显示全部楼层

数据集的遍历

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

4.1. 相关属性和方法
property Bof: Boolean;
数据集当前记录是否定位到第一条记录

property Eof: Boolean;
数据集当前记录是否定位到最后一条记录

procedure First;
移动数据集的当前记录到第一条记录

procedure Prior;
移动数据集的当前记录到前一条记录

procedure Next;
移动数据集的当前记录到后一条记录

procedure Last;
移动数据集的当前记录到最后一条记录

function MoveBy(Distance: Integer): Integer;
移动数据集的当前记录到相对当前记录Distance的记录


切换行号显示
   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;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-25 15:50:18 | 显示全部楼层

更新数据集

更新数据集

5.1. 相关属性和方法
property Bof: Boolean;
数据集当前记录是否定位到第一条记录

procedure CancelUpdates;
取消本地数据集的修改,不提交给服务端

function ApplyUpdates(MaxErrors: Integer); Integer;
把本地数据集的修改提交给应用服务端

procedure ApplyUpdates;
把本地数据集的修改提交给应用服务端

procedure ApplyUpdates(Cascade: Boolean);
把本地数据集的修改提交给应用服务端

以上给出的方法都是修改本地数据集的数据,并没有把修改提交给服务端,提交给服务端,需要调用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;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-25 15:50:29 | 显示全部楼层

性能考虑

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

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


6.1. 相关属性和方法
procedure DisableControls;
断开数据感知控件与数据集的关联

procedure EnableControls;
建立数据感知控件与数据集的关联


切换行号显示
   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;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-20 23:38 , Processed in 0.040863 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表