第十五章-数据访问部件的应用及编程(二)(4)2007-05-0715.5.1 TDataSource部件的属性TDataSource部件除了其他部件都拥有的Name属性和Tag属性之外,主要有下面几个属性:DataSet属性:该属性说明TDataSource部件从中获取数据的数据集的名字,它可以是TTable部件的名字,也可以是TQuery部件的名字,甚至还可以指定其他窗体内的数据集作为该属性的值,如在下面的程序中我们指定窗体Form2中的table1作为窗体Form1中的DataSource1的DataSet属性值:TForm1.Formcreate(Sender : Tobject);BeginDataSource1.DataSet := Form2.Table1;end;Enable属性:Enable属性可以暂时性地切断TDataSource部件和与之相连的数据集部件的连接。这是一个布尔型变量。当它的值为False时,TDataSource部件和数据集部件的连接被切断,且所有与TDataSource部件相连的数据浏览部件中将变为一片空白,不显示任何数据信息。当Enabled的值变为True时,TDataSource部件和数据集部件的连接恢复,且与TDataSource部件相连的数据浏览部件恢复显示数据。不过要实现上述这些功能,一般不使用TDataSource部件的Enabled属性,而是调用数据集部件的DisableControls方法和EnableControls 方法,因为调用这两个方法可以方便地控制与数据集部件相连的所有TDataSource部件以及与TDataSource部件相连的数据浏览部件。AutoEdit属性:这是一个布尔型变量,它用于说明是否将与TDataSource部件相连的数据集置于编辑状态。当AutoEdit的值为True时,应用程序运行时,与TDataSource相连的数据集部件自动地被设置成编辑状态,当用户在与TDataSource部件相连的数据浏览部件中输入新的值时,数据集部件中的记录也随之改变。如果AutoEdit的值为False,用户想通过数据浏览部件或程序修改数据集中的记录,必须要调用数据集部件的Edit方法,将其置为编辑状态之后才能够进行。15.5.2 TDataSource部件的事件TDataSource部件具有三个事件:● OnDataChange事件● OnStateChange● OnUpdataDataOnDataChange事件:当与TDataSource相连的数据集中的记录指针的位置发生改变时,该事件就被触发,也就是说当程序调用数据集部件的Next、Previous、Insert、Append等方法导致记录指针的位置发生改变时,便会触发该事件。该事件一般用于保持应用中多个部件之间的同步。OnUpdataData事件:当数据集部件中当前记录将要被修改时,触发该事件。例如在程序调用post方法之后但在修改后的数据记录真正被写回磁盘中的数据库文件之前触发该事件,在应用中使用非数据浏览部件时要它与数据集保持同步时常使用该事件进行相关的处理。OnStateChange事件:当与TDataSource部件相连的数据集部件的状态发生改变时,便触发该事件。因为数据集部件的State属性标明了数据集部件当前所处的状态,当数据集的状态发生变化时,使用该事件进行有关的处理是很有用的,在一个具体的应用中,数据集部件的状态常常是频繁地变化的,为了跟踪数据集部件的状态变化,可以用下面例子中的程序代码将数据集部件当前的状态显示在一个标签上:TForm1.DataSource1OnStateChange(Sender : Tobject);varS : String;beginCase Table1,State of dsInactive : S := "Inactive";dsBrowse : S := "Browse";dsEdit : S := "Edit";dsInsert : S := "SetKey";dsSetKey : S := "SetKey";end;Label1.Caption := S;end;类似地我们也可以通过检测数据集部件的状态来控制有关的按钮和菜单项是否有效。例如:在一个应用窗体中有一个InsertBtn按钮,用于控制向数据集部件table1对应的数据库表中插入记录;还有一个CancelBtn按钮用于控制是否取消用户对当前记录的修改或插入新记录。下面的程序代码根据Table1的状态来控制这两个按钮的功能(是否有效,在窗体是否变灰暗)。Form1.DataSource1OnStateChange(Sender : Tobject);beginInsertBtn.Enabled := (Table1.State = dsBrowse);CancelBtn.Enabled := Table1.State in [dsInsert,dsEdit,dsSetKey]end;上面的代码中,当Table1处于浏览状态(Browse状态时),用户是不能够向数据库表中插入新记录的,此时InsertBtn按钮将变灰暗即无效。当Table1不处于Browse状态时,InsertBtn按钮有效,用户是可以向表中插入新记录。同理,只有当Table1处于特入状态(Insert状态)或编辑状态(Edit状态)或查找状态(SetKey状态)时,CancelBtn按钮才有效,也即用户可以取消当前插入的记录、修改当前的记录以及查找到的结果等。
15.6 字段部件和字段编辑器的使用
字段部件有时又称字段对象它对应着数据库表中的列即字段,字段对象是不可见的部件,在Delphi中有两种方式创建字段部件:①在应用程序运行过程中,随着数据集部件被激活,对应于数据库表中每一列的字段部件便动态地被创建。②在设计过程中,程序设计人员利用字段编辑器(Fields Editor)可以创建永久性的字段部件,即使字段对象对应的数据库表的结构发生了变化时,这些字段部件也不会发生变化。既然字段部件是对应于数据库表中的各个字段的,而数据库表中的字段有多种数据类型,所以字段部件相应也有多种类型,字段部件的类型与数据库表中的字段的数据类型的对应关系如表15.5所示。表15.5 字段部件的类型━━━━━━━━━━━━━━━━━━━━━━━━━━━━字段部件的类型 对应的数据类型────────────────────────────TStringField 字符串类型的字段TSmallIntField 短整数类型的字段 -32768-32767TIntegerField 整数类型的字段TWordField 正整数类型的字段0-65535TBooleanField 布尔型字段TFloatField 浮点数类型的字段TCurrenCyField 货币型字段TDataField 日期型TTimeField 时间型TBCDField 小数位数固定的浮点数TDataTimeField 日期时间型字段━━━━━━━━━━━━━━━━━━━━━━━━━━━ 我们在本书中只介绍一些常见类型的字段部件的使用,其他类型字段部件的使用可以参看联机帮助文件。