分享

6.5 TTable组件(1)·网易学院·教程

 昵称5416312 2011-01-14

6.5 TTable组件(1)

 

在前一节里我们介绍了数据集组件TTable和TQuery共同的一些属性和方法。TTable组件是Delphi数据库编程中常用的最重要的组件之一,它是数据库应用程序访问数据库时必须使用的数据集组件之一。

6.5.1 TTable组件的主要属性

1. DatabaseName属性

 

DatabaseName属性用于说明数据库应用程序所操作的数据库的名字,它可以是由BDE定义的数据库别名、显式说明的数据库文件所在的磁盘路径或者由TDatabase组件定义的一个数据库名。DatabaseName属性常常是一个由BDE定义的数据库别名。使用由BDE定义的数据库别名代替数据库实际所在的路径和名字,好处是当实际的数据库存放的位置发生变化时,只需利用BDE简单地设置一下该数据库的别名,而数据库应用程序无需修改。

2. TableName属性

 

TableName属性用以说明当前TTable组件所连接的实际的数据库表。这两个属性一般都在设计阶段指定,当然在程序运行过程中也可以设置。但是要修改这两个属性时,必须要在TTable的Active属性为False时进行。当TTable的Active属性为True时,这两个属性是不能修改和设置的。

3. TableType属性

 

该属性说明与TTable组件相连接的数据库表的类型。当TableType属性设置成Default时,该属性所说明的数据库表的类型由数据库文件的扩展名决定。

若数据库文件的扩展名为.DB或没有扩展名,则表的类型是Paradox表。

若数据库文件的扩展名为.DBF,则表的类型是dBASE表。

若数据库文件的扩展名为.TXT,则表的类型是ASCII表。

如果TableType属性不设定为Default,那么与TTable 组件相连的数据库表的类型由TableType中设置的值决定,不用考虑数据库文件的扩展名。

4. Exclusive属性

 

这是一个布尔型属性,它标明是否以共享方式打开数据库表。如果Exclusive的值为True,当打开一个数据库表时,其他用户就不能访问该表了;若Exclusive的值为False,将以共享方式打开一个数据库表。显然不能将其他用户正在访问的表以互斥方式打开(设定Exclusive的值为True)。对于SQL数据库服务器上的数据库表,当以互斥方式被一个用户打开时,其他用户可以读取该表中的数据,但不能修改表中的数据。当然有些数据库服务器不支持这种方式,这要具体参看有关的数据库服务器的文档。

5. ReadOnly属性

 

这是一个布尔型属性,ReadOnly属性决定用户是否能够对表中的数据进行读写。ReadOnly为True 时,用户只能读取表中的数据;ReadOnly为False时,用户可以读写表中的数据。

6. CanModify属性

 

CanModify属性是一个只读属性,用户不能够修改其属性值,它反映了用户对数据库表拥有的实际特权。当ReadOnly为True时CanModify将自动地被置为False;当ReadOnly为False时,如果数据库允许用户对表进行读写,CanModify为True,否则CanModify为False。当CanModify为False时,数据库表是只读的,但不能将其置成编辑状态或插入状态;当CanModify属性为True时,虽然数据库表对应的数据集组件可以置成编辑和插入状态,但是这并不意味着用户能够插入和修改表中的数据,因为这还要受到其他因素的限制,如用户对SQL数据库服务器的访问权限等的限制。

TTable组件还有其他一些属性,请参看联机帮助。

6.5.2 TTable组件的方法及应用

1. 设定数据库表的使用范围

 

在实际应用中,数据库表中常常存放着大量的数据信息,其中包含着很多的记录,而我们的应用程序可能只需对其中一部分记录进行操作,因此,为应用程序指定一个使用范围就显得特别重要了。

(1)SetRangeStart方法

 

用于指定检索范围的起始记录,调用SetRangeStart方法之后,可以为起始记录的一个或多个字段指定相应的字段值。

(2)SetRangeEnd方法

 

用于指定检索范围的结束记录,调用SetRangeEnd方法之后,可以为结束记录的一个或多个字段指定相应的字段值。

(3)SetRange方法

 

SetRange方法包含了SetRangeStart和SetRangeEnd方法的功能,它可以同时指定检索范围的起始和结束记录。起始记录和结束记录的字段值以数组形式传给SetRange,其基本形式是:

SetRange([起始值]),([结束值])

(4)ApplyRange方法

 

根据用SetRangeStart、SetRangeEnd或SetRange方法说明的检索范围的起始和结束记录,具体设定一个检索范围。调用ApplyRange方法之后,应用程序只能对检索范围内的记录进行有关的操作。

(5)CancelRange方法

 

CancelRange方法的作用与ApplyRange方法的作用是相反的,这是取消为表设定的检索范围。调用CancelRange方法之后应用程序可以对表中全部记录进行有关的操作。

(6)EditRangeStart和EditRangeEnd方法

 

这两个方法的使用完全类似于SetRangeStart和SetRangeEnd方法,只是这两个方法用于设定一个可编辑的范围。

假设一个表中的索引包含两个字段LastName和FirstName,我们为索引中的一个字段或多个字段指定相应的字段值,就可以设定数据库表的使用范围。

代码如下所示:

Table1.SetRangeStart;

Table1.FieldByName('LastName').Asstring := 'Smith';

Table1.SetRangeEnd;

Table1.ApplyRange;

上述代码设定的范围包括LastName字段的值大于或等于Smith的所有记录。而下面的代码设定的范围则包括LastName字段的值大于或等于John且FirstName字段的值大于或等于M的记录。

Table1.SetRangeStart;

Table1.FieldByName('LastName').Asstring := 'John';

Table1.FieldByName('FirstName').Asstring := 'M';

Table1.SetRangeEnd;

Table1.ApplyRange;

2. 查找数据库表中的记录

 

如果想查找数据库表中的记录,必须先指定查找记录的一些字段的字段值,然后在表中进行检索,检索出与查找值相匹配的记录来。如果是在Paradox或dBASE数据库的表中查找记录,那么查找值所对应的字段必须是表中的关键字段或辅助索引字段。如果查找SQL数据库服务器中的表,那么查找值必须是表的IndexFieldNames属性中指定的字段。

Delphi提供了两种方式在数据库表中查找记录:Goto方式和Find方式。这两种方式十分相似,它们的主要区别在于为查找指定查找值的方法不一样。

(1)Goto方式

 

使用Goto方式进行数据查找使用的方法有SetKey方法、GotoKey方法和GotoNearest方法。其实际步骤如下:

1)确保要查找的字段是关键字段或辅助索引字段。

2)调用SetKey方法把与表对应的TTable组件置成查找状态。

3)把查找值赋给相应的字段。

4)调用GotoKey方法,并测试它的返回值,检验查找是否成功。

假设Table1对应的表中第一个字段是关键字段,Edit1是应用窗体中的一个文本框,用户可以通过Edit1输入查找值。

下面的代码将通过Goto方式进行查找:

Table1.SetKey; {将Table1置成查找状态}

Table1.Field[0].AsString := Edit1.Text; {指定查找值}

Table1.GotoKey; {进行查找}

上面最后一行代码是根据用户指定的查找值,在表中执行查找。查找的结果有两种,成功或失败,这是由调用GotoKey方法之后返回的布尔值决定的。如果返回True,那么查找成功,并且记录指针会指向与查找值匹配的记录;如果返回False,那么查找失败,记录指针的位置不发生变化。

下面的代码可以测试调用GotoKey方法之后的返回值,告知用户查找是否成功。

Table1.SetKey;

Table1.Field[0].AsString:= 'John';

If not Table1.GotoKey then

ShowMessage('无此记录')

在这一段代码中,如果在表中没有找到第一个字段值为John的记录,该应用程序会弹出一个对话框告知用户“无此记录”。

如果在表中存在多个关键字段或辅助索引中包含多个字段,在进行查找时,只想为第一个字段指定查找值,那么必须要设置TTable组件的KeyFieldCount的属性值为1。如果想为多个字段指定查找值,只能为相邻的字段指定查找值。例如辅助索引中共有3个字段,那么我们只能为第一个字段、第一和第二个字段或第一和第二以及第三个字段指定查找值,而不能为第一和第三个字段指定查找值。

GotoNearest方法的使用与GotoKey方法完全一样,只是它用于不精确查找,不要求查找结果与查找值精确匹配。当表中有与查找值精确匹配的记录时,它将记录指针移到该记录处,当表中没有与查找值精确匹配的记录时,它会查找出与查找值最接近的记录,并将记录指针移到该记录处。

下面是应用GotoNearest方法的一段代码:

Table1.SetKey;

Table1.Fields[0].AsString:= 'China';

Table1.GotoNearest;

执行上述代码后,若表中存在第一个字段值等于China的记录时,记录指针将移到该记录处;若表中不存在第一个字段值等于China的记录,而存在第一个字段值等于Chinese的记录,那么记录指针会移到该记录处。

如果我们不是以数据库表中的关键字段作为查找字段,也可以为TTable组件的IndexFieldName属性中的字段或IndexName属性中的字段指定查找值进行数据查找。例如,假设Customer表中有一个名叫CityIndex的辅助索引,我们为CityIndex中的字段指定查找值时,首先设置TTable组件的IndexName属性为CityIndex,然后再进行查找,下面是具体的程序代码:

Table1.IndexName := 'CityIndex';

Table1.Open;

Table1.SetKey;

Table1.FieldByName{'City').AsString := Edit1.Text;

Table1.GotoKey;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多