当前位置:数据库 > Oracle >>

ODAC基础技巧(三)主/明细表介绍

     两个表之间的主/明细表关系应用非常非常广泛。所以为数据库应用程序设计人员提供简单的做法来做的更好它是非常非常重要的。促使我们看看如何做的更好这项功能。

      如果我们在 "Department" 和 "Employee" 之间建立了主/明细表关系。"Department" 表包含下面字段: DepNo, DepName 和 Location。DepNo 是一个数字型的主键,别的两个字段是字符串类型。

     "Employee" 表包含下面字段: EmpNo, EmpName, Job, Manager 和 DepNo。 EmpNo 和 DepNo 是数字型字段, EmpName 和 Job 是字符串型字段。EmpNo 是一个主键且 DepNo 是一个绑定 "Employee" 和 "Department" 的外键。 

      这是显示和编辑数据表所必需的。

      ODAC 提供了两种绑定数据表的做法。第一个代码例子显示了通过参数绑定两个 TOraDataSet 组件 (TOraQuery, TSmartQuery, TOraTable 或 TOraStoredProc) 到主/明细关系中。

procedure TForm1.Form1Create(Sender: TObject);
var
Master, Detail: TOraQuery;
MasterSource: TDataSource;
begin
// 创建主数据集
Master := TOraQuery.Create(Self);
Master.SQL.Text := 'SELECT * FROM Department';

// 创建明细数据集

Detail := TOraQuery.Create(Self);
Detail.SQL.Text := 'SELECT * FROM Employee WHERE DepNo = :DepNo';

// 主表通过 TDataSource 组件来连接明细表
MasterSource := TDataSource.Create(Self);
MasterSource.DataSet := Master;
Detail.MasterSource := MasterSource;

// 打开主数据集和明细数据集

Master.Open;
Detail.Open;
end;

     注意一件事情:明细数据集的SQL语句中的参数名必须等于主数据集中用作明细表外键的字段名。在打开明细表数据集后,其数据老是等于当前主数据集记录字段(比如 DepNo)所限定的值。

     有一个额外的功能:当向明细表数据集插入新记录时,它自动根据主表中获取相应值来填充其外键的值。 

     现在,如果明细表 "Department" 的外键被命名为 DepLink 而不可能 DepNo. 在接下来情况下,上面的代码例子中当插入记录时,明细表数据集用不会自动填充当前的 DepNo 到当前的 DepLink 字段。这种疑问能够用第二个代码例子来处理:

procedure TForm1.Form1Create(Sender: TObject);

var
Master, Detail: TOraQuery;
MasterSource: TDataSource;
begin
// 创建主数集
Master := TOraQuery.Create(Self);
Master.SQL.Text := 'SELECT * FROM Department';

// 创建明细数据集
Detail := TOraQuery.Create(Self);
Detail.SQL.Text := 'SELECT * FROM Employee';

// 设置主/明细表

Detail.MasterFIE游览器lds := 'DepNo'; // primary key in Department
Detail.DetailFIE游览器lds := 'DepLink'; // foreign key in Employee

// 主表通过 TDataSource 组件连接明细表

MasterSource := TDataSource.Create(Self);
MasterSource.DataSet := Master;
Detail.MasterSource := MasterSource;

// 打开主数据表和明细表

Master.Open;
Detail.Open;
end;

在这种代码例子中,使用 MasterFIE游览器lds 和 DetailFIE游览器lds 属性建立主/明细关系。注意:在明细表的SQL语句中不能够有 WHERE 子句。

最新电脑病毒安全咨询,就在www.zzzyk.com电脑知识网

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,