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语言的核心概念,包括类、对象和继承...
鬱奖甲磺: 按动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,其实就是...