1. 添加数据模块(IBX 通用教程)
本节将创建一个数据模块(TDataModule),这是一种包含应用程序使用的非可视组件的表单。
以下是完全配置好的 TDataModule 的视图:
创建 TDataModule 后,您可以在其他表单中使用这个数据模块。
2. 添加 TDataModule
要将数据模块添加到项目中,请在项目管理器中右键单击项目名称,然后点击“添加新建 > 其他...”以显示“新建项目”对话框。
选择“数据模块”并点击确定。
选择新的 TDataModule。将其 Name 属性设置为 "DmEmployee"。将 OldCreateOrder 设置为 true。
保存新单元:
- 对于 Delphi,将单元保存为 DmCSDemo.pas。
现在向新的 TDataModule 添加组件。
3. 添加数据库和事务
添加两个基本的数据库组件:TIBDatabase 和 TIBTransaction。
就像在“查看不同表格”部分一样,将 TIBDatabase 拖到数据模块上。双击新的 TIBDatabase 以显示数据库组件编辑器或连接代理组件编辑器。填写对话框然后点击确定来设置 TIBDatabase 的属性:
注意:如果您像本示例中那样在应用程序中嵌入密码,那么任何人都可以在不登录的情况下访问此数据库。
通过将 Name 设置为 "EmployeeDatabase" 并设置 Connected 为 true 来完成 TIBDatabase 的配置。
向 TDataModule 添加 TIBTransaction。将 TIBDatabase 的 DefaultTransaction 属性设置为 "IBTransaction1"。
4. 添加存储过程
向数据库添加两个 TIBStoredProc 组件以使用存储过程。
- 在模块上放置一个 TIBStoredProc。将 Name 设置为 "ShipOrderProc"。从下拉菜单中将 Database 设置为 "EmployeeDatabase"。从下拉菜单中将 StoredProcName 设置为 "SHIP_ORDER"。SHIP_ORDER 是 EMPLOYEE 数据库中的存储过程之一。
- 向模块添加另一个 TIBStoredProc。将 Name 设置为 "DeleteEmployeeProc"。从下拉菜单中将 Database 设置为 "EmployeeDatabase"。从下拉菜单中将 StoredProcName 设置为 "DELETE_EMPLOYEE"。
5. 添加数据集
向模块添加五个 TIBDataSet 组件。每个 TIBDataSet 以不同的方式访问 EMPLOYEE 数据库中的不同数据库表。
- "EmployeeLookup" TIBDataSet
- 将 Transaction 属性设置为 "IBTransaction1"。这可能已经设置好了。
- 通过使用下拉菜单将 Database 属性设置为 "EmployeeDatabase" 来将此 TIBDataSet 连接到数据库。
- 将 Name 属性设置为 "EmployeeLookup"。
- 右键单击 "EmployeeLookup" TIBDataSet 并选择“编辑 SQL”。
- 将 CommandText 属性设置为从 EMPLOYEE 表中选择所有记录。
- 双击 TIBDataSet 组件以显示字段编辑器对话框。右键单击空白列表并从上下文菜单中选择“添加所有字段”。关闭字段编辑器。
- 右键单击 "EmployeeLookup" TIBDataSet 并选择数据集编辑器。
- 从键字段列中选择 "EMP_NO",然后点击生成 SQL 按钮。
- 点击确定按钮关闭向导。
您将使用此组件来访问数据库中的 EMPLOYEE 表。
- "SalesTable" TIBDataSet
- 将 Transaction 属性设置为 "IBTransaction1"。
- 使用下拉菜单将 Database 属性设置为 "EmployeeDatabase"。
- 将 Name 属性设置为 "SalesTable"。
- 右键单击 "SalesTable" TIBDataSet 并选择“编辑 SQL”。
- 将 CommandText 属性设置为从 SALES 表中选择所有记录。
- 双击 TIBDataSet 组件以显示字段编辑器对话框。右键单击空白列表并从上下文菜单中选择“添加所有字段”。关闭字段编辑器。
- 右键单击 "SalesTable" TIBDataSet 并选择数据集编辑器。
- 从键字段列中选择 "PO_NUMBER",然后点击生成 SQL 按钮。
- 点击确定按钮关闭向导。
您将使用此组件来访问数据库中的 SALES 表。
- "CustomerTable" TIBDataSet
- 将 Transaction 属性设置为 "IBTransaction1"。
- 使用下拉菜单将 Database 属性设置为 "EmployeeDatabase"。
- 将 Name 属性设置为 "CustomerTable"。
- 右键单击 "CustomerTable" TIBDataSet 并选择“编辑 SQL”。
- 将 CommandText 属性设置为从 CUSTOMER 表中选择所有记录,条件是 CUST_NO = :CUST_NO。
- 双击 TIBDataSet 组件以显示字段编辑器对话框。右键单击空白列表并从上下文菜单中选择“添加所有字段”。关闭字段编辑器。
- 右键单击 "CustomerTable" TIBDataSet 并选择数据集编辑器。
- 从键字段列中选择 "CUST_NO",然后点击生成 SQL 按钮。
- 点击确定按钮关闭向导。
您将使用此组件来访问数据库中的 CUSTOMER 表。
- "EmployeeTable" TIBDataSet
- 将 Transaction 属性设置为 "IBTransaction1"。
- 使用下拉菜单将 Database 属性设置为 "EmployeeDatabase"。
- 将 Name 属性设置为 "EmployeeTable"。
- 右键单击 "EmployeeTable" TIBDataSet 并选择“编辑 SQL”。
- 将 CommandText 属性设置为从 EMPLOYEE 表中选择所有记录。
- 右键单击 "EmployeeTable" TIBDataSet 并选择数据集编辑器。
- 从键字段列中选择 "EMP_NO",然后点击生成 SQL 按钮。
- 点击确定按钮关闭向导。
您也将使用此组件来访问数据库中的 EMPLOYEE 表。
- "SalaryHistoryTable" TIBDataSet
- 将 Transaction 属性设置为 "IBTransaction1"。
- 使用下拉菜单将 Database 属性设置为 "EmployeeDatabase"。
- 将 Name 属性设置为 "SalaryHistoryTable"。
- 右键单击 "SalaryHistoryTable" TIBDataSet 并选择“编辑 SQL"。
- 将 CommandText 属性设置为从 SALARY_HISTORY 表中选择所有记录,条件是 EMP_NO=:EMP_NO。
- 右键单击 "SalaryHistoryTable" TIBDataSet 并选择数据集编辑器。
- 从键字段列中选择 "EMP_NO",然后点击生成 SQL 按钮。
- 点击确定按钮关闭向导。
您也将使用此组件来访问数据库中的 SALARY_HISTORY 表。
6. 添加数据源
向模块添加四个 TDataSource 组件。TDataSource 与上述 TIBDataSet 相关联。TDataSource 组件作为 TIBDataSet 和数据感知控件之间的接口。
- "SalesSource" TDataSource。使用下拉菜单将 TDataSource 的 DataSet 设置为 "SalesTable"。将 Name 属性设置为 "SalesSource"。
- "CustomerSource" TDataSource。使用下拉菜单将 TDataSource 的 DataSet 设置为 "CustomerTable"。将 Name 属性设置为 "CustomerSource"。
- "EmployeeSource" TDataSource。使用下拉菜单将 TDataSource 的 DataSet 设置为 "EmployeeTable"。将 Name 属性设置为 "EmployeeSource"。
- "SalaryHistorySource" TDataSource。使用下拉菜单将 TDataSource 的 DataSet 设置为 "SalaryHistoryTable"。将 Name 属性设置为 "SalaryHistorySource"。
- 一些 TIBDataSet 需要链接到 TDataSource 以建立与另一个表的关系。
- 选择 "CustomerTable" TIBDataSet。使用下拉菜单将 DataSource 设置为 "SalesSource"。
- 选择 "SalaryHistoryTable" TIBDataSet。使用下拉菜单将 DataSource 设置为 "EmployeeSource"。
7. 添加事件处理程序
构建 TDataModule 的最后一步是添加几个事件处理程序。
选择 TDataModule。在对象检查器中,点击事件选项卡。双击 OnCreate 事件以生成事件的框架代码。为这个事件添加以下代码:
procedure TDmEmployee.DmEmployeeCreate(Sender: TObject);
begin
EmployeeDatabase.Open;
end;
选择 "EmployeeTable" TIBDataSet。在事件选项卡中,双击 AfterPost 事件。使用以下代码作为此处理程序:
procedure TDmEmployee.EmployeeTableAfterPost(DataSet: TDataSet);
begin
{ 员工工资的变化会触发工资历史的变化,
因此如果该表是打开的,现在需要刷新 }
with SalaryHistoryTable do if Active then Refresh;
end;
选择 "EmployeeTable" TIBDataSet。在事件选项卡中,双击 BeforeDelete 事件。使用以下代码作为此处理程序:
procedure TDmEmployee.EmployeeTableBeforeDelete(DataSet: TDataSet);
begin
{ 将当前员工的 ID 分配给存储过程的参数 }
DeleteEmployeeProc.Params.ParamValues['EMP_NUM'] := EmployeeTable['EMP_NO'];
DeleteEmployeeProc.ExecProc; { 触发存储过程 }
EmployeeTable.Refresh; { 刷新数据 }
{ 阻止 EmployeeTable 删除,因为存储过程已经完成了工作 }
Abort;
end;
这完成了数据模块的构建,您将在下一节中使用它。在继续之前,请检查此模块的代码。请注意,已经自动向数据模块类中添加了许多对象,这些对象代表表字段,例如 SalesTablePO_NUMBER。