15.4.2 TTable部件的方法及应用
15.4.2.1 设定数据库表的使用范围
在我们实际应用中的数据库表中常常存放着大量的数据信息,其中包含着很多的记录,而我们的应用程序可能只需对其中一部分记录进行操作,因此,为应用程序指定一个使用范围就显得特别重要了,为方便有效地指定数据库表的使用范围Delphi为TTable部件提供了下列方法供用户使用:
● SetRangeStart和EditRangeStart方法
● SetRangeEnd和EditRangeEnd方法
● SetRange([Start Values],[End Values])方法
● ApplyRange方法
● CancelRange方法
1. SetRangeStart方法
用于指定检索范围的起始记录,调用SetRangeStart方法之后,可以为起始记录的一个或多个字段指定相应的字段值。SetRangeEnd方法用于指定检索范围的结束记录,调用SetRangeEnd方法之后,可以为结束记录的一个或多个字段指定相应的字段值。
2. SetRange方法
SetRange方法包含了SetRangeStart和SetRangeEnd方法的功能,它可以同时指定检索范围的起始和结束记录,起始记录和结束记录的字段值以数组形式送给SetRange,其基本形式是:
SetRange([起始值],[结束值])
3. ApplyRange方法
根据SetRangeStart,SetRangeEnd或SetRange方法说明的检索范围的起始和结束记录,具体设定一个检索范围,调用ApplyRange方法之后,应用程序只能对检索范围内的记录进行有关的操作。
4. CancelRange方法
CancelRange方法的作用与ApplyRange方法的作用是相反的,这是取消为表设定的检索范围,调用CancelRange方法之后应用程序可以对表中全部记录进行有关的操作。
在这里要注意的是:如果我们使用的是paradox表或dBASE表,在调用SetRangeStart,SetRangeEnd以及SetRange方法时,只能为表中的索引字段或定义的索引指定相应的字段值,以设定检索范围。如果使用SQL数据库服务器中的数据库表,可以为IndexFieldNames属性中指定的字段指定相应的字段值。
例如:假设Table1与Customer.DB表相连,Customer.DB中一个索引字段是CustNo,同时应用窗体中有两个编辑框StartVal和EndVal用于输入起始、结束记录的字段CustNo的值,下面的程序代码便可以为我们设定一个检索范围:
Tabel1.SetRangeStart; {指定检索范围的起始记录}
Tabel1CustNo.AsString:= StartVal.Text {为起始记录的CustNo字段指定字段值}
Tabel1.SetRangeEnd; {指定检索范围的结束记录}
if EndVal.Text <> ' ' then
Tabel1CustNo.AsString := EndVal.Text; {为结束记录的CustNo 字段指定字段值}
Tabel1.ApplyRange; {根据检索范围的起始、结束记录设定检索范围}
注意上面的程序代码,在为结束记录的CustNo字段指定字段值时,首先检查EndVal的值是否为空,如果EndVal的值为空,那么设定的检索范围没有包含一条记录,因为没有任何记录的字段值小于NIL;如果StartVal的值为空,那么检索范围将从表中的第一条记录开始,因为表中任何记录的字段值都大于空(NIL)。
上述代码可以用SetRange方法改写成:
If EndVal.Text <>' ' then
Tabel1.SetRane([StartVal.Text].[EndVal.Text]);
Table1.ApplyRange;
EditRangeStart和EditRangeEnd方法的使用完全类似于SetRangeStart和SetRangeEnd方法,只是调这两个方法是设定一个可编辑的范围。
又如:假设一个表中的一个索引包含两个字段LastName和FirstName,我们为索引中的一个字段或多个字段指定相应的字段值,设定数据库表的使用范围。
Table1.SetRangeStart;
Table1.FieldByName('LastName').Asstring := 'Smith';
Table1.SetRangeEnd;
Tabel1.ApplyRange;
上述代码设定的范围包括LastName字段的值大于或等于Smith的所有记录。而下面的代码设定的范围则包括LastName字段的值大于或等于Smith且FirstName字段的值大于或等于'J'的记录。
Table1.SetRangeStart;
Table1.FieldByName('LastName').Asstring := 'Smith';
Table1.FieldByName('FirstName').Asstring := 'J';
Table1.SetRangeEnd;
Tabel1.ApplyRange;