首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载 | ||
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试 MPA考试 | 中科院 |
||
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT 新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语 |
||
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证 华为认证 | Java认证 |
||
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格 报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师 人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平 驾驶员 | 网络编辑 |
||
卫生资格 | 执业医师 | 执业药师 | 执业护士 | ||
会计从业资格考试(会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师 注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师 |
||
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师 质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师 设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师 城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师 |
||
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏 |
5. 访问输出参数和结果集
存储过程在输出参数数组中返回值。如果服务器支持返回值可以是单个结果或者结果集。
在运行时访问存储过程的输出参数,可以索引Params属性或者用ParamByName方法访问这些值。下列表达式都用输出参数设置了编辑框的值:
Edit1.Text := StoredProc1.Params[6].AsString;
Edit1.Text := StoredProc1.ParamsByName('Contact').AsString;
如果存储过程返回结果集,则用标准数据相关控制访问和显示值会更有用。
在某些服务器上如Sybase,存储过程能象查询语句那样返回结果集,应用程序可以使用数据相关控制一显示这些存储过程的输出。
用数据相关控制显示存储过程返回结果的方法如下:
① 将DataSource部件放在数据模块上。
② 将DataSource部件的DataSet属性设置为接收数据的TStoredProc部件的名字。
③ 将数据相关控制的DataSource属性设为DataSource部件的名字。
这样,当用于TStoredProc部件和Active属性为True时,数据相关控制就能显示从存储过程返回的结果。
18.3.4 从开发平台到服务器的向上适化
18.3.4.1 适化概述
所谓适化就是将桌面应用转化为Client/Server应用。
适化是一个很复杂的主题,这里不详细讲述。本节将介绍适化Delphi 应用程序中最重要的方面。
适化的主要方面有:
● 将数据库从桌面平台到服务器的适化
● 将应用程序转化为Client/Server的适化
适化还需要实现从桌面环境到Client/Server环境的转化。
桌面数据库和SQL服务器数据库在许多方面有不同之处。例如:
● 桌面数据库用于同一时刻单用户的访问,而服务器用于多用户访问
● 桌面数据库是面向记录的,而服务器是面向集合的
● 桌面数据库将每个表存储在独立的文件中, 而服务器将所有的表存储在数据库中Client/Server应用必须解决更新的问题,最复杂的是联接、网络和事务控制
18.3.4.2 适化数据库
适化数据库包含下列步骤:
● 在桌面数据库结构的基础上,定义服务器上的元数据
● 将数据从桌面转化到服务器中
● 解决下列问题:
● 数据类型差异
● 数据安全性和完整性
● 事务控制
● 数据访问权
● 数据合法性
● 锁定
Delphi提供了两种方法适化一个数据库。
● 使用Database Desktop工具,选择菜单Tools/Utilities/Copy to命令将数据库表从桌面方式拷贝到SQL格式
● 建立应用TBatchMove部件的应用程序
这两种方法都可以将表结构和数据从桌面数据源转化到服务器上。依靠这些数据库,可能需要改变结果表。例如,可能想进行不同数据类型的映射。
也可以将下列特征加入数据库:
● 完整性约束
● 索引
● 检测约束
● 存储过程和触发器
● 其它服务器特征
如果用SQL脚本和服务器数据定义工具定义元数据会更有效。然后用前面介绍的两种方法转移数据。因为如果是手工定义数据库表,Database Desktop和TBatchMove 部件将只拷贝数据。
18.3.4.3 适化应用程序
在理论上,设计用来访问局部数据的Delphi应用程序做很少的修改就可以访问远程服务器上的数据。如果在服务器上定义适合的数据源,你就能将应用程序指向访问它,这只需简单地改变应用程序中TTable或TQuery部件的DatabaseName属性。
实际上,在访问局部和过程数据源之间有许多重要的不同之处。Client/Server应用程序必须解决大量的在桌面应用中所没有的问题。
任何Delphi应用程序都能用TTable或TQuery部件访问数据。桌面应用程序通常都是使用TTable部件。当适化到SQL服务器上时,用TQuery会更有效,如果应用程序要检索大量记录,则TQuery部件要略胜一筹。
如果应用程序使用统计或数学函数,那么在服务器上通过存储过程执行这些函数会更有效。因为存储过程执行更快,使用存储过程还可以减少网络负载,特别是大量行数据的函数。
例如,计算大量记录的标准差:
● 如果该函数在客户端执行,所有的值从服务器上检索出来并送到客户端,导致网络拥塞
● 如果该函数在服务器端执行,则应用程序只需要服务器上的答案
18.4 Delphi客户/服务器应用实例分析
本节中采用的实例是Delphi2.0数据库的例子CSDEMO。CSDEMO是Delphi客户/服务器编程的示例程序,它采用的数据库服务器是Local InterBase Server。
CSDEMO较好地示范了BDE环境的配置,InterBASE Server高级功能应用,SQL服务器联接,触发器应用、存储过程编程和事务控制技术等,具有较高的参考价值。本节讲述下列内容:
● 数据库环境介绍
● TDatabase的应用
● 不同数据库表的切换
● 触发器编程
● 存储过程编程
● 事务控制应用
18.4.1 数据库环境介绍
本例中采用的数据库服务器是Local InterBase Server。Local InterBase是InterBase Server的单用户版32位、兼容ANSI SQL。Local InterBase支持客户/服务器应用在单机上的开发和测试,并且可以很容易地适化到InterBase Server上。因此,开发客户/服务器应用采用Local InterBase作为原型开发环境是很方便的。
18.4.1.1 IBLOCAL的BDE参数
本例中的SQL数据库是IBLOCAL。它是由BDE配置工具(BDECFG32.EXE)设置参数值。它的各项参数值列于下表:
表18.13 IBLOCAL的各项参数值
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
参 数 名 参 数 值
────────────────────────────────────
TYPE INTRBASE
PATH
SERVER NAME C:\INTRBASE\EXAMPLES\EMPLOYEE.GDB
USER NAME SYSDBA
OPEN MODE READ/WRITE
SCHEMA CACHE SIZE 8
LANGDRIVER
SQLQRYMODE
SQLPASSTHRU MODE SHARED AUTOCOMMIT
SCHEMA CHCHE TIME -1
MAX ROWS -1
BATCH COUNT 200
ENABLE SCHEMA CACHE FALSE
SCHEMA CACHE DIR
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
18.4.1.2 数据库结构介绍
IBLOCAL数据库的结构都是由InterBase服务器工具交互式SQL工具(ISQL)定义的。
用ISQL定义数据库,首先要用Create Database命令建立数据库,建立的新数据库一般是以GDB为扩展名。建立好后,就可以用SQL语言定义数据库表,例如建立EMPLOYEE表的SQL语句如下:
定义域名数据类型:
CREATE DOMAIN FIRSTNAME AS VARCHAR(15);
CREATE DOMAIN LASTNAME AS VARCHAR(20);
CREATE DOMAIN COUNTRYNAME AS VARCHAR(15);
CREATE DOMAIN EMPNO AS SMALLINT;
CREATE DOMAIN DEPTNO AS CHAR(3)
CHECK (VALUE = '000' OR (VALUE > '0' AND VALUE <= '999') OR VALUE IS NULL);
CREATE DOMAIN JOBCODE AS VARCHAR(5)
CHECK (VALUE > '99999');
CREATE DOMAIN JOBGRADE AS SMALLINT
CHECK (VALUE BETWEEN 0 AND 6);
CREATE DOMAIN SALARY AS NUMERIC(15, 2)
DEFAULT 0
CHECK (VALUE > 0);
建立EMPLOYEE表:
CREATE TABLE EMPLOYEE (EMP_NO EMPNO NOT NULL,
FIRST_NAME FIRSTNAME NOT NULL,
LAST_NAME LASTNAME NOT NULL,
PHONE_EXT VARCHAR(4),
HIRE_DATE DATE DEFAULT 'NOW' NOT NULL,
DEPT_NO DEPTNO NOT NULL,
JOB_CODE JOBCODE NOT NULL,
JOB_GRADE JOBGRADE NOT NULL,
JOB_COUNTRY COUNTRYNAME NOT NULL,
SALARY SALARY NOT NULL,
FULL_NAME COMPUTED BY (last_name || ', ' || first_name),
PRIMARY KEY (EMP_NO));
CHECK语句是给数据库字段取值范围加约束条件。PRIMARY_KEY语句是给表建立关键字索引。
如法炮制,就可以定义IBLOCAL中的所有表。
IBLOCAL中的表包括:
EMPLOYEE CUSTOMER DEPARTMENT EMPLOYEE_PROJECT
PROJECT SALES SALARY_HISCORY
各数据库表中的内容如下:
表18.14 EmployeeDemoDB中各数据库表的内容
━━━━━━━━━━━━━━━━━━━━━━━━━━━
数据库表名 表中内容
───────────────────────────
EMPLOYEE 雇员信息
CUSTOMER 客户信息
DEPARTMENT 部门信息
EMPLOYEE_PROJECT 雇员负责的工程
PROJECT 工程信息
SALES 销售信息
SALARY_HISTORY 雇员薪水调整的历史信息
━━━━━━━━━━━━━━━━━━━━━━━━━━━
每个数据库表中都定义了关键字段。关于数据库表中的字段名、类型、大小,这里不再赘述。
相关推荐:2010年9月计算机等级考试试题及答案解析专题北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |