首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试
MPA考试 | 中科院
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT
新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
华为认证 | Java认证
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格
报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师
人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平
驾驶员 | 网络编辑
卫生资格 | 执业医师 | 执业药师 | 执业护士
会计从业资格考试会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师
注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师
质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师
设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师
城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏
您现在的位置: 考试吧(Exam8.com) > 计算机等级考试 > 计算机二级 > Delphi > 复习资料 > 正文

2011计算机等考Delphi:Delphi客户服务器应用开发

来源:考试吧Exam8.com) 2010-10-30 9:05:16 考试吧:中国教育培训第一门户 模拟考场
本章中我们将阐述客户服务器体系结构原理、如何用Delphi构建客户/服务器的环境和Delphi存取远程SQL服务器的编程和注意事项。

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

  TStoredProc Delphi 专门用来使用服务器存储过程的部件。CSDEMO 中演示用TStoredProc调用存储过程的窗体是TFrmExecPr

  在程序运行中,当按下ShipOrder按钮,要求对ORED_STA_TUS等字段的内容作修改以维护数据库的一致性。字段内容的修改任务由服务器上的存储过程SHIP_ORDER完成。SHIP_ORDE的程序如下:

  PROCEDURE SHIP_ORDER

  DECLARE VARIABLE ord_stat CHAR(7);

  DECLARE VARIABLE hold_stat CHAR(1);

  DECLARE VARIABLE cust_no INTEGER;

  DECLARE VARIABLE any_po CHAR(8);

  BEGIN

  SELECT s.order_status, c.on_hold, c.cust_no

  FROM sales s, customer c

  WHERE po_number = :po_num

  AND s.cust_no = c.cust_no

  INTO :ord_stat, :hold_stat, :cust_no;

  IF (ord_stat = "shipped") THEN

  BEGIN

  EXCEPTION order_already_shipped;

  SUSPEND;

  END

  ELSE IF (hold_stat = "*") THEN

  BEGIN

  EXCEPTION customer_on_hold;

  SUSPEND;

  END

  FOR SELECT po_number

  FROM sales

  WHERE cust_no = :cust_no

  AND order_status = "shipped"

  AND paid = "n"

  AND ship_date < 'NOW' - 60

  INTO :any_po

  DO

  BEGIN

  EXCEPTION customer_check;

  UPDATE customer

  SET on_hold = "*"

  WHERE cust_no = :cust_no;

  SUSPEND;

  END

  UPDATE sales

  SET order_status = "shipped", ship_date = 'NOW'

  WHERE po_number = :po_num;

  SUSPEND;

  END

  Parameters:

  PO_NUM INPUT CHAR(8)

  该过程只带有一个输入参数:PO_NUM,类型是CHAR(8)。

  在客户端使用该过程的TStoreProc部件是ShipOrderProc,其主要属性如下表:

  表18.19 ShipOrderProc部件主要属性的取值

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

  属性名 属 性 值

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

  DatabaseName EmployeeDemoDB

  ParamBindMode pbByName

  Params PO_NUM(输入参数,String类型)

  StoredProcName SHIP_ORDER

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

  客户端执行SHIP_ORDER的程序如下:

  procedure TFrmExecProc.BtnShipOrderClick(Sender: TObject);

  begin

  with DmEmployee do

  begin

  ShipOrderProc.Params[0].AsString := SalesTable['PO_NUMBER'];

  ShipOrderProc.ExecProc;

  SalesTable.Refresh;

  end;

  end;

  当用户按ShipOrder按钮时,执行这段程序。程序中先准备输入参数,用ExecProc方

  法执行存储过程。调用SalesTable.Refresh方法刷新数据显示。

  在CSDEMO应用程序中另一个使用存储过程的TStoredProc部件是DeleteEmployeeProc。它完成的任务是删除Employee表中的记录,并修改所有相关的表, 以维护数据的一致性。其属性如下:

  表18.20 DeleteEmployeeProc部件主要属性的取值

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

  属性名 属 性 值

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

  DataBaseName EmployeeDemoDB

  ParamBindMode PbByName

  Params EMP_NUM(输入参数,整型)

  StoredProcName DELETE_EMPLOYEE

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

  存储过程DELETE_EMPLOYEE的程序如下:

  PROCEDURE DELETE_EMPLOYEE

  DECLARE VARIABLE any_sales INTEGER;

  BEGIN

  any_sales = 0;

  SELECT count(po_number)

  FROM sales

  WHERE sales_rep = :emp_num

  INTO :any_sales;

  IF (any_sales > 0) THEN

  BEGIN

  EXCEPTION reassign_sales;

  SUSPEND;

  END

  UPDATE department

  SET mngr_no = NULL

  WHERE mngr_no = :emp_num;

  UPDATE project

  SET team_leader = NULL

  WHERE team_leader = :emp_num;

  DELETE FROM employee_project

  WHERE emp_no = :emp_num;

  DELETE FROM salary_history

  WHERE emp_no = :emp_num;

  DELETE FROM employee

  WHERE emp_no = :emp_num;

  SUSPEND;

  END

  Parameters:

  EMP_NUM INPUT INTEGER

  从上述存储过程的例子中,我们看到存储过程在维护服务器上的数据一致性方面有很强的能力,它节省了系统开销,提高了客户端的性能。

  18.4.2.5 事务控制编程

  在客户/服务器应用程序中,事务控制是一项很重要的技术。它对于提高系统的可靠性,维护数据一致性有着重要的意义。

  Delphi中提供了事务的隐式和显式两种控制方法。其中显式控制的性能较高,下面介绍Delphi事务显式控制的编程方法。

  Delphi担当事务控制任务的部件是TDatabase 。TDatabase 用于事务控制的属性是TransIsolation,方法有StartTranstion、Commit和Rollback。关于这些属性和方法作用和使用方法请参阅客户/服务器事务管理。

  在CSDEMO中TDatabase 部件为EMployeeDatabase,其TransIsolation属性值为tiReadCommitted,意为如果存在多个同时事务访问数据库,则其中任一事务只能读其它事务提交的了数据。

  CSDEMO中演示事务控制的窗体是TFrmTransDemo。

  DBGrid1中显示EmployeeTable中的内容。当窗口显示时,EmployeeDatabase开始一次事务控制并激活EmployeeTable:

  procedure TFrmTransDemo.FormShow(Sender: TObject);

  begin

  DmEmployee.EmployeeDatabase.StartTransaction;

  DmEmployee.EmployeeTable.Open;

  end;

  当窗口被关闭或隐藏时,EmployeeDatabase提交事务:

  procedure TFrmTransDemo.FormHide(Sender: TObject);

  begin

  DmEmployee.EmployeeDatabase.Commit;

  end;

  窗口中有两个按钮BtnCommitEdits和BtnUndoEdits。按下BtnCommitEdits按钮将提交当前事务,并开始新的事务控制并刷新数据。

  procedure TFrmTransDemo.BtnCommitEditsClick(Sender: TObject);

  begin

  if DmEmployee.EmployeeDatabase.InTransaction and

  (MessageDlg('Are you sure you want to commit your changes?',

  mtConfirmation, [mbYes, mbNo], 0) = mrYes) then

  begin

  DmEmployee.EmployeeDatabase.Commit;

  DmEmployee.EmployeeDatabase.StartTransaction;

  DmEmployee.EmployeeTable.Refresh;

  end else

  MessageDlg('Can''t Commit Changes: No Transaction Active', mtError, [mbOk], 0);

  end;

  按下BtnUndoEdits按钮将返转当前事物,恢复原来的数据,开始新的事务控制,并刷新数据的显示。

  procedure TFrmTransDemo.BtnUndoEditsClick(Sender: TObject);

  begin

  if DmEmployee.EmployeeDatabase.InTransaction and

  (MessageDlg('Are you sure you want to undo all changes made during the ' +

  'current transaction?', mtConfirmation, [mbYes, mbNo], 0) = mrYes) then

  begin

  DmEmployee.EmployeeDatabase.Rollback;

  DmEmployee.EmployeeDatabase.StartTransaction;

  DmEmployee.EmployeeTable.Refresh;

  end else

  MessageDlg('Can''t Undo Edits: No Transaction Active', mtError, [mbOk], 0);

  end;

上一页  1 2 3 4 5 6 7 8 9  下一页
  相关推荐:2010年9月计算机等级考试试题及答案解析专题
       预告:名师解析2010年9月计算机等级考试试题答案
       2010年9月计算机等级考试成绩查询时间及入口
       2010年9月计算机等考成绩查询短信免费提醒开通
文章搜索
版权声明:如果计算机等级考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本计算机等级考试网内容,请注明出处。