多层数据库开发十二:使用数据控件

2008-04-09 04:23:18来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

第十二章 使用数据控件
  在数据库应用程序中,数据控件是经常要用到的。与前面介绍的数据集构件如TTable、TQuery、TStoredProc、TClientDataSet不同的是,数据控件都是可视的。也就是说,如果修改了这些构件的属性,能在窗体上马上反映出来。如果这些构件的Enabled属性设为True并且数据集的Active属性也设为True,在设计期就可以看到数据。
12.1 Delphi 4中有哪些数据控件
  在Delphi 4的IDE中,数据控件都位于构件选项板的“Data Controls”页上。下面简单介绍这些数据控件:
.TDBGrid以行和列组成的栅格显示数据。
.TDBNavigator用于对整个数据库的记录进行导航,如向前翻一个记录、向后翻一个记录、翻到第一个记录、翻到最后一个记录等。
.TDBText把字段的内容作为标签显示。
.TDBEdit以编辑框的形式显示一个字段的内容。
.TDBMemo以多行文本编辑器的形式显示备注字段的内容。
.TDBImage用于显示数据库中的图像字段。
.TDBListBox以列表框的形式显示数据。
.TDBComboBox以组合框的形式显示数据。
.TDBCheckBox以复选框的形式显示数据。
.TDBRadioGroup以单选框分组框的形式显示数据。
.TDBLookupListBox以列表框的形式显示这个表的Lookup表的数据。
.TDBLookupComboBox以组合框的形式显示这个表的Lookup表的数据。
.TDBRichEdit以RTF格式显示备注字段的内容。
.TDBCtrlGrid与TDBGrid相似,但每一个单元都可以分别设置属性。
.TDBChart以图表的形式显示数据库的数据,用法与TChart相似。
  上述数据控件在设计期具有数据感知的特点。如果正确设置了DataSource属性指定了一个数据源,马上就能看到数据,而不需要编译和运行程序。
12.2 数据控件的基本用法
  这一节介绍数据控件的基本用法,包括怎样指定一个数据源、怎样编辑和更新数据、怎样禁止和允许数据刷新。
12.2.1 指定一个数据源
  数据控件必须通过TDataSource构件连接数据集。TDataSource构件扮演的角色实际上就是数据控件与数据集之间的桥梁。
  首先,把一个数据集构件放到窗体或数据模块上,设置它的DatabaseName属性指定要访问的数据库,设置它的TableName属性指定要访问的表。
  接着,把一个TDataSource构件放到窗体或数据模块上,设置它的DataSet属性指定数据集。
  然后,把一个数据控件放到窗体上,设置它的DataSource属性指定TDataSource构件,而这个TDataSource构件的DataSet属性已经指定了一个数据集。
  最后,设置数据控件的DataField属性指定要显示的字段。不过,对于TDBGrid、TDBCtrlGrid和TDBNavigator构件来说,不需要设置DataField属性,因为这几个控件是以整个数据集为工作内容的。
12.2.2 编辑和更新数据
  除了TDBNavigator构件外,其他数据控件都是用来显示和编辑数据的。这里要介绍怎样编辑数据。
  要使用户能编辑数据,数据集必须进入dsEdit状态。如果TDataSource的AutoEdit属性设为False,用户不能直接编辑数据,除非程序调用Edit函数。
  要使用户能够在数据控件中修改数据,必须把数据控件的ReadOnly属性设为False。如果ReadOnly属性设为True,数据控件中显示的数据就是只读的。
  一般情况下,TDataSource构件的Enabled属性设为True。如果这个属性设为False,数据控件就无法显示数据,更不能修改数据。
  如果数据集构件的ReadOnly属性设为True,数据集就是只读的,用户在数据控件中所作的修改不能写到数据集中。
  除了TDBGrid构件外,当用户修改了一个字段的值,还需要把输入焦点移走,新的数据才写到数据集中。在移走输入焦点之前,用户随时可以按ESC键取消修改。
  在TDBGrid构件建立的栅格中,当用户修改了一个字段的值,还需要把输入焦点移到另一条记录上,新的数据才写到数据集中。
12.2.3 禁止和允许数据刷新
  当程序正在遍历整个数据集或者搜索一个特定的记录时,应当暂时禁止数据控件刷新数据,这样能加快遍历或搜索的速度,防止屏幕总是在闪烁。
  调用数据集的DisableControls可以暂时禁止连接这个数据集的数据控件刷新数据。DisableControls函数通常在循环操作前调用。等循环结束后,程序应当立即调用数据集构件的EnableControls函数重新允许刷新数据。
  为了确保最后总是能恢复刷新,建议采用Try...Finally结构。这样,即使在循环中出现异常,也可以保证总能调用EnableControls。
  下面的代码演示了怎样调用DisableControls和EnableControls函数:
CustTable.DisableControls;
Try
  CustTable.First;
  While not CustTable.EOF Do
  Begin
   ...
   CustTable.Next;
  End;
Finally
  CustTable.EnableControls;
End;
12.2.4 手动刷新数据
  调用数据集的Refresh可以读取数据集中最新的数据并刷新数据控件,这个功能在多用户环境尤其有用,因为其他用户有可能已改变了数据集中的数据。
  有时候,调用Refresh可能会导致意想不到的结果。例如,如果另一个用户已经删除了一条记录,调用Refresh后,这条记录将从数据控件中消失。
12.3 显示单个字段的数据控件
  有的数据控件以数据库的一个或几个字段作为工作内容,如TDBText和TDBEdit,而有的数据控件以整个数据集为工作内容,如TDBGrid和TDBNavigator。
  显示单个字段的数据控件往往是从一个标准的Windows控件演化而来的,例如,TDBEdit构件就可以认为是TEdit的数据感知版本。
  图12.1 用TDBText构件把数据作为标签显示
12.3.1 把数据作为标签显示
  TDBText构件是一个只读的数据控件,它非常类似于TLabel构件和TStaticText构件。TDBText构件能够把数据作为标签显示,用来标注其他控件。例如,可以用一个TDBText构件在鱼的图片下显示鱼的名称(Common_Name字段),如图12.1所示。
  TDBText构件需要指定一个字段。当用户使用导航器或其他手段浏览记录时,TDBText构件显示的数据将自动变化,因为TDBText构件总是显示当前记录的数据。例如,在图12.1中,当用户用鼠标单击栅格的滚杆两端的箭头时,鱼的图片将自动变化,鱼的名称也相应改变,这一切都不需要编程。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:多层数据库开发十一:TClientDataSet

下一篇:我的文章-《剖析Delphi中的多态》