DELPHI基础教程:数据访问部件的应用及编程(二)[3]
Delphi提供了两种方式在数据库表中查找记录 Goto方式和Find方式 这两种方式十分相似 它们的主要区别在于为查找指定查找值的方法不一样
使用Goto方式进行数据查找使用的方法有SetKey方法 GotoKey方法和GotoNearest方法 其实际步骤如下
①确保要查找的字段是关键字段或辅助索引字段
②调用SetKey方法把与表对应的TTable部件置成查找状态
③把查找值赋给相应的字段
④调用GotoKey方法 并测试它的返回值检验查找是否成功
假设Table 对应的表中第一个字段是关键字段 Edit 是应用窗体中的一个编辑框 用户可以通过Edit 输入查找值 下面的代码将通过Goto方式进行查找
Table SetKey; {将Table 置成查找状态}
Table Field[ ] AsString := Edit Text; {指定查找值}
Table GotoKey; {进行查找}
上面最后一行代码是根据用户指定的查找值 在表中执行查找 查找的结果有两种 也许成功也许失败 这是由调用GotoKey方法之后返回的布尔值来决定 如果返回True 那么查找成功 并且记录指针会指向与查找值匹配的记录 如果返回Fale 那么查找失败 记录指针的位置不发生变化 下面的代码可以测试调用GotoKey方法之后的返回值 告知用户查找是否成功
Table SetKey;
Table Field[ ] AsString:= Smith ;
If not Table GotoKey then
ShowMessage( 记录没找到 )
在这一段代码中 如果在表中没有找到第一个字段值为Smith的记录 该应用程序会弹出一个对话框告知用户 记录没有找到
如果在表中存在多个关键字段或辅助索引中包含多个字段时 你在进行查找时 只想为第一个字段指定查找值 那么必须要设置TTable部件的KeyFieldCount的属性值为 如果想为多个字段指定查找值 只能为相邻的字段指定查找值 例如辅助索引 *** 有三个字段 那么我们只能为第一个字段 第一和第二个字段 第一和第二以及第三个字段指定查找值 而不能为第一和第三个字段指定查找值
GotoNearest方法的使用与GotoKey方法完全一样 只是它用于不精确查找 它不要求查找结果与查找值精确匹配 当表中有与查找值精确匹配的记录时 它将记录指针移到该记录处 当表中没有与查找值精确匹配的记录时 它会查找出与查找值最接近的记录 并将记录指针移到该记录处
下面是应用GotoNearest方法的一段代码
Table SetKey;
Table Fields[ ] AsString:= Sm ;
Table GotoNearest;
执行上述代码后 若表中存在第一个字段值等于Sm的记录时 记录指针将移到该记录处 若表中不存在第一个字段值等于Sm的记录 而存在第一个字段值等于Smith的记录 那么记录指针会移到该记录处
如果我们不是以数据库表中的关键字段作为查找字段 我们也可以为TTable部件的IndexFieldName属性中的字段或IndexName属性中的字段指定查找值进行数据查找 例如 假设Customer表中有一个名叫CityIndex的辅助索引 我们为CityIndex中的字段指定查找值进行查找时 首先设置TTable部件的IndexName属性为CityIndex 然后再进行查找 下面是具体的程序代码
Table IndexName := CityIndex ;
Table Open;
Table SetKey;
Table FieldByName{ City ) AsString := Edit Text;
Table GotoKey;
使用Find方式 使用Find方式在数据库中进行数据查找的方法有 FindNearest方法和FindKey方法
FindKey方法和FindNearest方法为数据查找提供了一个简单的方法 它们将SetKey 指定查找值 执行查找三个步骤融合在一步里完成 它们在指定查找值时 是把各字段的查找值组成一个数组传给FindKey或FindNearest 下面是使FindKey方法的一个例子
假设Tabel 对应的表中的第一个字段是关键字段
Table FindKey([Edit Text])
如果用GotoKey方法完成这一功能则需要编写下面代码
Table SetKey;
Table Fields[ ] AsStrine := Edit Text;
Table GotoKey;
FindKey方法和FindNearest方法的区别与GotoKey和GotoNearest方法的区别是一样的
创建主要──明细数据库应用
TTable部件中MasterSource属性和MasterFields属性是用于定义两个数据库表的一对多的关系 MasterSource属性指定主表对应的TDataSource部件 MasterFields属性指定主表和明细表之间建立联系的字段 主表和明细表之间建立一对多关系时 可能不只是基于一个字段 可能有多个字段 如果有多个字段 那么在说明MasterFields属性时 多个字段之间要用分号隔开 如Table MasterFields := OrderNo;CustNo 在设计阶段可以使用字段连接设计器(Field Link Designer)为两上表创建一对多的关系 在Object Inspector 中双击TTable部件的MasterFields便可以打开Field Link Designer 进行一对多关系的创建
Field Link Designer提供了一种可视化的方法来创建主要──明细表之间的一对多关系 图中Available Indexes组合框中存放着明细表中的关键字段和索引字段 可以选择索引字段进行连接 在主表中选择一个用于连接的关键字段 然后将其与明细表中相应的关键字段连接 单击Add按钮 主要──明细表的连接字段将显示在Joined Fields列表框中 如
CustNo >CustNo
TDataSource部件及其应用
TDataSource部件是开发数据库应用程序中用到的非常重要的部件 它是连接数据集部件TTable或TQuery和数据浏览部件的桥梁 TDataSource部件本身十分简单 它所拥有的属性 事件和方法都比较少 在使用该部件时无需作太多的工作 它主要是为数据浏览部件服务的 如果在应用程序中没有使用数据浏览部件 我们也没有必要为应用程序设置TDataSource部件
TDataSource部件的属性
TDataSource部件除了其他部件都拥有的Name属性和Tag属性之外 主要有下面几个属性
DataSet属性 该属性说明TDataSource部件从中获取数据的数据集的名字 它可以是TTable部件的名字 也可以是TQuery部件的名字 甚至还可以指定其他窗体内的数据集作为该属性的值 如在下面的程序中我们指定窗体Form 中的table 作为窗体Form 中的DataSource 的DataSet属性值
TForm Formcreate(Sender : Tobject)
Begin
DataSource DataSet := Form Table ;
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方法 将其置为编辑状态之后才能够进行
lishixinzhi/Article/program/Delphi/201311/25159