手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>delphi>列表

Delphi客户服务器应用开发(八)

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
部件。DBGrid1显示EmployeeTable中的数据。DBGrid2显示Project表中的数据。使用存储过程的TQuery部件名为EmployeeProjectsQuery,它的作用是建立Employee 表和Project 表的连接,以实现当DBGrid1中记录改变时,DBGrid2中的数据作相应的改变。具体的连接任务是由服务器上的存储过程Get_Emp_Proj完成。下面是Get_Emp_Proj的程序:

 

PROCEDURE Get_Emp_Proj

BEGIN

FOR SELECT proj_id

FROM employee_project

WHERE emp_no = :emp_no

INTO :proj_id

DO

SUSPEND;

END

 

EMP_NO INPUT SMALLINT

PROJ_ID OUTPUT CHAR(5)

 

  该过程带两个参数:

  EMP_NO是输入参数,类型是SMALLINT.

PROJ_ID是输出参数,类型是CHAR(5)

 

  相应地,EmployeeProjectsQuery的主要属性如下:

 

18. 18 EmployeeProjectsQuery部件主要属性的取值

━━━━━━━━━━━━━━━━━━━━━━━━━━

   属 性       属

   ──────────────────────────

    DatabaseName EmployeeDemoDB

Params EMP_No(输入参数,Smallint类型)

SQL Select * from

Get_Emp_Proj(:EMP_NO)

━━━━━━━━━━━━━━━━━━━━━━━━━━

 

TQuery部件是在SQL语句中直接调用存储过程。

  下面是客户端的程序:

 

procedure TFrmQueryProc.FormShow(Sender: TObject);

begin

DmEmployee.EmployeeTable.Open;

EmployeeSource.Enabled := True;

with EmployeeProjectsQuery do if not Active then Prepare;

end;

 

  用Prepare显式地准备SQL语句,虽非必须,但可以优化SQL的执行。

 

procedure TFrmQueryProc.EmployeeDataChange(Sender: TObject; Field: TField);

begin

EmployeeProjectsQuery.Close;

EmployeeProjectsQuery.Params[0].AsInteger :=

DmEmployee.EmployeeTableEmp_No.Value;

EmployeeProjectsQuery.Open;

 

WriteMsg('Employee ' DmEmployee.EmployeeTableEmp_No.AsString

' is assigned to ' IntToStr(EmployeeProjectsQuery.RecordCount)

' project(s).');

end;

 

  该事件处理过程与EmployeeSourceOnDataChange属性相联。用于当EmployeeTable数据记录变化时,修正存储过程的输入参数,并执行SQL语句。

  2. TStoredProc部件的存储过程编程

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!