DELPHI基础教程:Delphi客户服务器应用开发(四)[3]

作者&投稿:元史 (若有异议请与网页底部的电邮联系)
~

  procedure TFrmTriggerDemo FormShow(Sender: TObject)

  begin

  DmEmployee EmployeeTable Open;

  DmEmployee SalaryHistoryTable Open;

  end;

  procedure TDmEmployee EmployeeTableAfterPost(DataSet: TDataSet)

  begin

  { 一个雇员的薪水变化将触发薪水调整历史记录的变化

  因此 如果SalaryHistory打开的话 就需要更新显示 }

  with SalaryHistoryTable do if Active then Refresh;

  end;

   存储过程编程

  存储过程也是SQL服务器上的一段程序 它接收输入参数 在服务器端执行 并将结果返回客户端 存储过程是必须在客户应用程序中显式调用的

  对于数据库表中大量记录的统计和函数计算 存储过程是很有用 这样可以将重复性计算任务转换到服务器 提高数据库应用的性能

  Delphi中有两个部件能操作远程数据库服务器上的存储过程 TQuery和TStoredProc

   TQuery的存储过程编程

  CSDEMO中演示用TQuery调用存储过程的窗体是TFrmQueryProc

  TFrmQueryProc中有两个TDBGrid 部件 DBGrid 显示EmployeeTable中的数据 DBGrid 显示Project表中的数据 使用存储过程的TQuery部件名为EmployeeProjectsQuery 它的作用是建立Employee 表和Project 表的连接 以实现当DBGrid 中记录改变时 DBGrid 中的数据作相应的改变 具体的连接任务是由服务器上的存储过程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( )

  该过程带两个参数

  EMP_NO是输入参数 类型是SMALLINT

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

  相应地 EmployeeProjectsQuery的主要属性如下

  表 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

   mployeeProjectsQuery Close;

  EmployeeProjectsQuery Params[ ] AsInteger :=

  DmEmployee EmployeeTableEmp_No Value;

  EmployeeProjectsQuery Open;

  WriteMsg( Employee + DmEmployee EmployeeTableEmp_No AsString +

   is assigned to + IntToStr(EmployeeProjectsQuery RecordCount) +

   project(s) )

  end;

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

   TStoredProc部件的存储过程编程

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

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

  PROCEDURE SHIP_ORDER

  DECLARE VARIABLE ord_stat CHAR( )

  DECLARE VARIABLE hold_stat CHAR( )

  DECLARE VARIABLE cust_no INTEGER;

  DECLARE VARIABLE any_po CHAR( )

  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

  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( )

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

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

  表 ShipOrderProc部件主要属性的取值

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

  属性名          属 性 值

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

  DatabaseName EmployeeDemoDB

  ParamBindMode pbByName

  Params PO_NUM(输入参数 String类型)

  StoredProcName SHIP_ORDER

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

lishixinzhi/Article/program/Delphi/201311/25127




DELPHI基础教程:动态链接库编程(一)[3]
Delphi全部支持传统Windows动态链接库编程中的三种调用方式 它们是 ● 通过过程\/函数名 ● 通过过程\/函数的别名 ● 通过过程\/函数的顺序号 通过过程或函数的别名调用 给用户编程提供了灵活性 而通过顺序号(Index)调用可以提高相应DLL的装载速度 动态调用 动态调用中的API函数 动态调用中使用的Windows API...

DELPHI基础教程:数据浏览部件的应用及编程(一)[1]
设置各数据浏览部件的DataField属性为数据集部件TTable或TQuery部件中存在的字段部件的名字 在这里需要注意的是 TDBGrid部件和TDBNavigator部件是自动地访问数据集部件中所有可以访问的字段部件的 因此它们是没有DataField属性的 对于这些部件可以跳过第 步 lishixinzhi\/Article\/program\/Delphi\/201311\/25151 ...

DELPHI基础教程:Delphi开发数据库应用程序概述(一)[3]
Visual Query Builder 以可视化的方式建立SQL语句对数据库表和表中的记录进行操作 ━━━ SQL links使得Delphi数据库应用程序利用SQL语言访问驻留在远程服务器上的数据 这些服务器包括ORACLE Sybase Microsoft SQL Server Informix InterBase 当安装SQL Link驱动程序之后 SQL语句便可以直接操作服务器上的数据...

DELPHI基础教程:Delphi图形图像编程(一)[3]
返回目录 DELPHI基础教程 编辑推荐 Java程序设计培训视频教程 J EE高级框架实战培训视频教程 Visual C++音频\/视频技术开发与实战 Oracle索引技术 ORACLE G数据库开发优化指南 Java程序性能优化 让你的Java程序更快 更稳定 C嵌入式编程设计模式 Android游戏开发实践指南 lishixinzhi\/Article\/program\/Delphi\/...

DELPHI基础教程:开发Delphi对象式数据管理功能(二)[4]
返回目录 DELPHI基础教程 编辑推荐 Java程序设计培训视频教程 J EE高级框架实战培训视频教程 Visual C++音频\/视频技术开发与实战 Oracle索引技术 ORACLE G数据库开发优化指南 Java程序性能优化 让你的Java程序更快 更稳定 C嵌入式编程设计模式 Android游戏开发实践指南 lishixinzhi\/Article\/program\/Delphi\/...

DELPHI基础教程:异常处理与程序调试(一)[3]
对象异常类 所谓对象异常是指非部件的对象引发的异常 Delphi定义的对象异常包括流异常 打印异常 图形异常 字符串链表异常等 流异常类 流异常类包括EStreamError EFCreateError EFOpenError EFilerError EReadError EWriteError EClassNotFound 它们的结构关系如下 EStreamError | EFCreateError | EFOpenError | E...

DELPHI基础教程:Delphi客户服务器应用开发(三)[1]
Delphi Client\/Server编程 本节介绍如何运用Delphi可视化开发工具和ObjectPascal语言开发Client\\Server的数据库应用程序 采用的例子是CSDEMOS 这是Delphi 自带的演示Client\\Server开发的例子 它安装在C:\\Program Files\\Borland\\Delphi \\Demos\\DB\\CSDemos中(缺省安装)本节将包含以下内容 ● 使用TDatabase部件...

DELPHI基础教程:动态链接库编程(一)[2]
一个DLLs没有自己的堆栈段(SS) 它使用调用它的应用程序的堆栈 因此在DLL中的过程 函数绝对不要假定DS = SS 一些语言在小模式编译下有这种假设 但使用Delphi可以避免这种情况 Delphi绝不会产生假定DS = SS的代码 Delphi的任何运行时间库过程\/函数也都不作这种假定 需注意的是如果读者想嵌入汇编语言...

DELPHI基础教程:Delphi图形图像编程(一)[1]
在Delphi中 专门定义了一组对象和部件用以绘制图形 完成一些简单的图像功能 利用这些对象 部件的方法 可以方便地绘制各种常用图形 通过设置它们的属性 能得到不同风格的图形 另外 通过对鼠标事件的定义 可以方便的设计图形绘制程序 本章将介绍以下内容 TCanvas TPen TBrush TColor对象的方法及属性 绘图功能...

Delphi6程序设计教程目录
第一部分:入门指南 第一章:轻松步入 Delphi6在这里,我们将介绍Delphi6的基本环境设置和操作,让你快速熟悉这款开发工具。第二章:Delphi6程序设计语言 深入理解Delphi6的语言特性和语法,为后续编程打下扎实基础。第三章:Object Pascal语言程序结构 学习Object Pascal语言的核心概念,包括类、对象和继承...

开福区19469409218: Delphi入门教程是什么?
鬱奖甲磺: 按动ObjectInspector下端的“Events”页标签,使得Events页可见,这一定的事件后边的空白处,可以定义对象接受到相应事件时执行的动作

开福区19469409218: Delphi语法基础?
鬱奖甲磺: Delphi语法基础2.1 保留字与标识符2.1.1 标识符 标识符是Object Pascal语言中各种成分 的名称,这些成分包括变量(Var)、常量(Const)、类型(Type)、过程(Procedure)、函数(Function)、方法(Method)、单元(Unit)等.标识符...

开福区19469409218: 请问谁有黑防的Delphi编程教程啊!!!
鬱奖甲磺: DELPHI基础教程 -------------------------------------------------------------------------------- 第一章 Delphi快速入门(一) 第一章 Delphi快速入门(二) 第一章 Delphi快速入门(三) 第一章 Delphi快速入门(四) 第一章 Delphi快速入门(五) 第二章 Delphi面...

开福区19469409218: Delphi7开发基础教程的介绍 -
鬱奖甲磺: 《Delphi7开发基础教程》由牛汉民编著,科学出版社出版.本书共分7章,主要内容包括Delphi 7入门、Delphi语言基础、面向对象的程序设计技术、组件库体系结构及其使用、数据库应用系统开发基础、基于BDE的数据库应用程序开发和Delphi 7程序调试,可作为高等职业技术院校和相关认证课程教材,也可供从事Delphi 7应用开发的程序设计人员学习、参考.目录

开福区19469409218: delphi的基础 -
鬱奖甲磺: File->New->Other 在New 页面下选取Console Application ,copy 你的代码 ,File选Save All ,F9运行,就会在你Save的目录找到需要的exe文件.

开福区19469409218: (delphi)请问大哥们,delphi要怎么入门?
鬱奖甲磺: 目前,我正被迫学习Delphi(公司要求,没办法啊),我觉得学习顺序应该是下面的步骤: 1、pascal语言,学习下基本的数据类型、语法结构(跟C差好远,郁闷); 2、搞个delphi7,学习桌面应用程序的开发,不用太难的,搞点小程序就可以,比如写个计算器什么的,关键是看delphi生成的代码是如何写的(感觉跟VB一个样,事件驱动); 3、学习delphi的面向对象编程,理解面向对象编程的思想,这点非常重要,要不就失去了学习delphi的意义; 4、win32的编程,这部分是delphi的优势所在(NND,win32的API好难记). 目前就这样,希望后面看见的高手指点、纠正下,看我的顺序正确不.谢谢.

开福区19469409218: 初学delphi我就要学delphi了,我找到了一个不错的教程是
鬱奖甲磺: 建议先学习学习pascal语法,因为delphi用的是object pascal.然后多看一些他人的简单例子.熟悉delphi常用组件的属性. 以后向数据库方向发展的话,建议先掌握ADO,了解BDE就可以了(它的配置太..). 如果编写常用程序的话,建议先了解一下WINDOWS API的函数. 因为delphi程序最终也是调用WINDOWS API来实现各种功能的.

开福区19469409218: 请问delphi怎么入门编写和调用DLL? -
鬱奖甲磺: 一、delphi 本来就是用来编写代码,然后生成应用程序,虽然说现在网络应用盛行,但电脑上大都运行的还是原生应用程序,没感觉有什么落后的.二、程序做成模块化,与 dll 关系不大.三、DLL 与普通的 窗口程序并没有太大的区别,注意提供的接口规则,重点还是代码.可以把 dll 看成是一个函数包就可以了,不算复杂.

开福区19469409218: 我是个编程爱好者现在想学delphi不知该从何学起?? -
鬱奖甲磺: 如果你有编程基础就好办.先找一本基础书,网上找电子书也可以,对delphi的基础进行一些基本的了解,然后按教程上的例子做几个程序,这里关键不是求出与教程一样的结果,而是要充分理解命令语句的含义.有了这些基础后,可从网上下载一些原程序,在充分理解原程序的基础上试试按自己的想法修改.我想,经过这样的锻炼后,应该基本掌握delphi了.

开福区19469409218: 如何学习 delphi -
鬱奖甲磺: 终于有人问这个问题了!我虽然现在编程这里得分最多,但是很少有人问我最喜欢回答的问题.就凭你要学DELPHI,不给分我也好好回答!我是个DELPHI的忠实FANS.大学刚毕业.初中生可以学这个,这是肯定的.学习DELPHI,其实就是...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网