教程:使用 InterBase Express 访问数据库(四)

使用存储过程获取员工项目分配(IBX 通用教程)

在这一部分中,您将构建一个表单,使用存储过程来查找员工的项目。创建这个表单的过程与您在“审计工资变更”中遵循的步骤非常相似,特别是因为您将再次使用“DmCSDemo” TDataModule。您将添加一些数据库组件,这与“审计工资变更”中的表单不同。

1. 创建表单

首先,向项目中添加另一个 VCL 表单。在项目管理器中,右键单击项目并点击菜单项“添加新建 > VCL 表单”。

调整新表单的属性:

  • 将 Caption 设置为“员工项目分配”。
  • 将 Name 设置为“FrmQueryProc”。
  • 将表单的 Height 改为 370,Width 组件改为 380。
  • 将 OldCreateOrder 设置为 true。

保存表单:对于 Delphi,将文件保存为 Frmqrysp.pas。
在此表单中使用 TDataModule:对于 Delphi,在 Frmqrysp.pas 的实现部分开头添加以下行:uses DmCSDemo;

2. 添加数据库组件

添加一个 TDataSource 组件以获取 EMPLOYEE 表的信息。从下拉菜单中将 DataSet 设置为“DmEmployee.EmployeeTable”。请注意,此数据集由“DmCSDemo” TDataModule 提供。将 Name 改为“EmployeeSource”。

添加一个 TIBQuery 以使用 SQL 语句访问数据库表。

  • 将 Name 改为“EmployeeProjectsQuery”。
  • 从下拉菜单中将 Database 设置为“DmEmployee.EmployeeDatabase”。
  • 如果需要,从下拉菜单中将 Transaction 设置为“DmEmployee.IBTransaction1”。
  • 通过点击此属性的省略号 (...) 按钮,显示 CommandText Editor 对话框来设置 SQL 属性。在对话框的 SQL 窗格中输入以下行:

Select * from Get_Emp_Proj( :EMP_NO )

这段 SQL 代码调用存储过程 Get_Emp_Proj,它返回包含给定员工编号所有项目的 dataset。

  • 添加另一个 TDataSource。将 Name 改为“EmployeeProjectsSource”。将 DataSet 设置为“EmployeeProjectsQuery”。此 TDataSource 作为 TIBQuery 和您将在下一节添加的 TDBGrid 数据感知控件之间的接口。

3. 添加可视组件

在表单底部添加一个 TStatusBar。您将使用它来显示当前选定员工项目的相关信息。勾选 SimplePanel 为 true。
按下图所示添加三个 TPanel 组件。这些 TPanel 提供了一个框架,用于定位可视组件。调整它们以填满表单的区域,除了 TStatusBar。
 

在“Panel1”上添加一个 TDBNavigator 以导航数据库记录。从下拉菜单中将 DataSource 设置为“DmEmployee.EmployeeSource”。此数据源由 TDataModule 提供。在 VisibleButtons 属性下,勾选所有按钮。将 ShowHint 设置为 true,以便显示 TDBNavigator 工具按钮的提示。
在“Panel1”的右侧放置一个 TBitBtn。设置以下属性:

  • 将 Caption 设置为“E&xit”,这样按 ALT+x 就相当于点击按钮。
  • 从下拉菜单中将 Kind 设置为“bkClose”。此设置使按钮在点击 TBitBtn 时执行关闭对话框的命令。
  • 在“Panel2”上放置一个 TDBGrid。调整大小以填满 TPanel。从下拉菜单中将 DataSource 设置为“EmployeeSource”。

在“Panel3”上放置另一个 TDBGrid。调整大小以填满 TPanel。从下拉菜单中将 DataSource 设置为“EmployeeProjectsSource”。TIBQuery 中的 SQL 查询获取包含给定员工编号所有项目的 dataset。“EmployeeProjectsSource” TDataSource 使 TIBQuery 的 dataset 可供 TDBGrid 使用。

4. 添加事件处理程序和其他代码

通过添加一个例程和创建三个事件处理程序来完成表单。您不需要为 TBitBtn 添加事件处理程序,因为这个按钮已经与点击它关联了一个命令。

添加一个 WriteMsg 例程,在 TStatusBar 中显示消息。

在 Frmqrysp.pas 的类型部分的私有部分添加以下过程:

         procedure WriteMsg( strWrite : String );
您可以通过按 CTRL-SHIFT-C 使用类补全在实现部分创建此函数的存根。

为新过程添加以下代码:

procedure TFrmQueryProc.WriteMsg(StrWrite: String);
begin
  StatusBar1.SimpleText := StrWrite;
end;
接下来,为“EmployeeSource” TDataSource 组件创建一个事件处理程序。在设计选项卡中选择“EmployeeSource” TDataSource,然后在对象检查器中双击 OnDataChange 事件。这个事件处理程序跟踪顶部 TDBGrid 中当前选定的员工,并更新 TStatusBar 和底部 TDBGrid。为事件处理程序添加以下代码:

procedure TFrmQueryProc.EmployeeSourceDataChange(Sender: TObject;
  Field: TField);
begin
  { 执行 ProjectsQuery,它使用查询过程 }
  EmployeeProjectsQuery.Close;
  EmployeeProjectsQuery.Params[0].AsInteger :=
    DmEmployee.EmployeeTable.FieldByName('EMP_NO').AsInteger;
  EmployeeProjectsQuery.Open;

  WriteMsg('Employee ' + DmEmployee.EmployeeTable.FieldByName('EMP_NO').AsInteger +
           ' is assigned to ' + IntToStr(EmployeeProjectsQuery.RecordCount) +
           ' project(s).');
end;

最后,为表单本身编写两个事件处理程序。在设计选项卡中选择表单。在对象检查器中双击 OnShow 事件以创建事件的框架代码。添加以下代码:

procedure TFrmQueryProc.FormShow(Sender: TObject);
begin
  DmEmployee.EmployeeTable.Open;
  { 允许从 EmployeeTable 流向本地 EmployeeSource 的数据流。这
    将允许 DataChange 事件执行查询过程 }
  EmployeeSource.Enabled := True;
  { 显式查询准备不是必需的,但可以提供最佳性能 }
  with EmployeeProjectsQuery do if not Active then Prepare;
end;

当表单仍然被选中时,在对象检查器中双击 OnHide 事件以创建此事件的代码存根。修改存根如下:

procedure TFrmQueryProc.FormHide(Sender: TObject);
begin
  { 为我们的表单关闭 DataChange 事件,因为 DmEmployee.EmployeeTable
    在其他地方使用 }
  EmployeeSource.Enabled := False;
end;

这完成了表单的构建。

5. 显示表单

修改在“创建主表单”中创建的主表单。在该表单上添加一个按钮以显示您刚刚创建的员工项目表单。

在 Frmmain.pas 的实现部分开头的 uses 子句中添加额外的一行,以便主表单知道您刚刚添加的 FrmQrySP 单元:

uses
   FrmQrySP,   { 查询存储过程示例 }
   FrmTrigg,   { 触发器示例 }
   FrmViews;   { 查看示例 }
 

在 Frmmain 表单上添加另一个 TButton,类似于在“创建主表单”中添加的 TButton。将 TButton.Caption 设置为“&查询存储过程示例”。将 TButton.Name 设置为“BtnQrySP”。然后通过在 Frmmain 表单的设计选项卡中双击该 TButton 添加新按钮的事件处理程序。使用以下代码作为事件处理程序:


procedure TFrmLauncher.BtnQrySPClick(Sender: TObject);
begin
  FrmQueryProc.ShowModal;
end;
 

6. 运行应用程序

构建并运行应用程序。主表单显示:


点击新的“查询存储过程示例” TButton 以显示新表单:


顶部的 TDBGrid 显示数据库中的 EMPLOYEE 表。TStatusBar 显示当前选定员工没有项目。底部的 TDBGrid 除了字段名称 PROJ_ID 外不显示其他数据,因为员工没有项目。如果您选择了有项目的员工,您将看到:

EmpProjAssignWithProjects.png


底部的 TDBGrid 显示 TIBQuery 的 SQL 命令返回的数据集:包含给定员工编号的所有项目的 dataset。TStatusBar 显示员工的项目数量。

这完成了本项目。您可以根据 RAD Studio 安装的 CsDemos 示例的指导扩展它。
 

README FOR INTERBASE 5.6 Online documentation and Release Notes For a description of new features and changes in InterBase 5.6, use Acrobat Reader to view the ReleaseNotes.pdf file. In addition, the complete 5-volume document set for InterBase 5.5 is available in PDF format with InterBase 5.6. Use Adobe Acrobat Reader 3 to view these PDF files. To take advantage of the full-search indexing for the document set, you need Acrobat Reader 3.0.1 (or later) With Search. This version of Reader is included on your InterBase 5.6 CD-ROM. You can also download it from http://www.adobe.com/prodindex/acrobat/readstep.html If you go directly to this Adobe site, be sure to download the version "With Search", not the plain version. ACCESSING THE DOCUMENT SET: You can open any of the books directly from the InterBase folder in the Start menu if you have Acrobat Reader already installed and the PDF extension is associated with Acrobat Reader. To access the books from the Help menu in Server Manager, choose InterBase Help and choose the book you want from the "InterBase Books Online" section. ________________________ Uninstalling InterBase 5.6 The Windows InterBase installation allows you to choose between performing a complete install or selecting individual components. If you install a subset of the components, you can run the install again later to add more components. However, when you uninstall, only the components that you installed the last time are removed. ------------------------------------- Copyright (c) 1999 Inprise Corp. All rights reserved.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caridle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值