首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载 | ||
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试 MPA考试 | 中科院 |
||
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT 新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语 |
||
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证 华为认证 | Java认证 |
||
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格 报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师 人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平 驾驶员 | 网络编辑 |
||
卫生资格 | 执业医师 | 执业药师 | 执业护士 | ||
会计从业资格考试(会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师 注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师 |
||
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师 质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师 设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师 城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师 |
||
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏 |
1. 使用TDatabase的方法和属性
下表中列出了TDatabase部件中用于事务管理的方法和属性以及它们的使用方法:
表18.11 TDatabase用于事务显式控制的方法表
━━━━━━━━━━━━━━━━━━━━━━━━
方法或属性 作 用
────────────────────────
Commit 提交数据的修改并终止事务
Rollback 取消数据的修改并终止事务
StartTransaction 开始一个事务
TransIsolation 表述事务的独立性级别
━━━━━━━━━━━━━━━━━━━━━━━━
StartTransaction,Commit和Rollback是供应用程序在运行时调用开始事务,控制事务并且保存或放弃所做数据修改的方法。
TransIsolation是TDatabase部件的用于控制作用于相同表的不同事务之间如何交互的属性。
⑴ 开始一个事务
当你开始一个事务时,后来的所有读写数据库的表达式都发生在那次事务的环境中。每个表达式都是其中一部分。任何表达式所做的修改,要么成功地提交给数据库,要么每一个修改都被取消。考虑一个在ATM上的银行传输问题。当顾客决定将钱从存款帐户转到支付帐户时,在银行数据库记录上必须发生两个修改:
● 存款帐户必须记入借方
● 支付帐户必须记入贷方
如果出于某种原因,其中的一个操作不能被完成,那么任何一个操作都不应该发生。因为这些操作是相关的,它们应该发生在同一个事务中。
为了开始Delphi应用程序中的一个事务,需要调用TDatabase部件中的StartTransaction方法:
DatabaseInterBase.StartTransaction;
此后的所有数据操作都发生在最近一个事务的环境中,直到该次事务通过调用Commit或Rollback显式地终止为止。
那么,应当将事务保持多久呢?理想状态下,只要需要,多久都行。事务的活跃状态越长,同时访问数据库的用户越多,在你的事务的生命其中,更多的并发、同时的事务开始和终止,于是当试图提交修改时,与其它事务冲突的可能性更大。
⑵ 提交一个事务
为了做永久性修改,事务必须使用TDatabase部件的Commit方法提交。执行提交表达式将保存数据库的修改并终止事务。例如,下列表达式将终止在上例中开始的事务:
DatabaseInterBase.Commit
Commit的调用应当置于try…except表达式中。如果一个事务不能成功提交,你就能处理错误,并重试操作。
⑶ 返转一个事务
为了取消数据库修改,必须用Rollback方法返转一个事务。Rollback 复原一个事务的修改,并终止事务,例如:下列表达式将返转一个事务:
DatabaseInterBase.Rollback;
Rollback通常发生在:
● 异常处理代码
● 按钮或菜单事件代码,如用户点按了Cancel按钮
⑷ 使用TransIsolation属性
TransIsolation属性描述TDatabase部件事务的独立级别,事务的独立级别决定了事务与其它作用于相同表的事务是如何相互作用的。在改变或设置TransIsolation 的值之前,应当相当熟悉Delphi中的事务和事务管理。
TransIsolation的缺省值是tiReadCommitted。下表中总结了TransIsolation的可能值并描述了它们的含义:
表18.12 TransIsolation属性值的含义
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
独立级别 含 义
──────────────────────────────────────
tiDirtyRead 允许读由其它同时事务写入数据库的未提交的修改。未提交的
修改不是永久性的,可能在任何时候被复原。 在这个级别你
的事务与其它事务所做的修改具有最低独立度。
tiReadCommitted 只允许读由其它同时事务提交的数据库修改。这是缺省的独
立级别。
tiRepeatableRead 允许单个的数据库读事务无法看见其它同时事务对相同数据做
的修改。这个独立级别保证了你的事务一次读一个记录,记录
的视图不会改变, 在这个级别你的事务与其它事务做的修改完
全独立。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
各种数据库服务器不同程度地支持这些独立级别,有的根本不支持。 如果请求的隔离级别不被服务器支持,Delphi将采用更高的独立级别。各种服务器支持的独立级别请参见表18.10。
如果应用程序使用ODBC与服务器交互,ODBC驱动程序必须支持独立级别。
2. 使用传递式SQL
为了能使用传递式SQL控制事物,必须:
● 使用Delphi Client/Server Suite
● 安装正确的SQL Links驱动程序
● 正确配置网络协议
● 访问远程服务器上数据库的能力
● 用BDE配置工具将SQLPASSTHROUGH MODE设置为NOT SHARED
通过传递式SQL,你可以使用TQuery、TStoredProc、或TUpdateSQL部件直接发送一个SQL事务控制表达式给远程数据库服务器;BDE本身并不处理SQL表达式,采用传递式SQL可使用户直接获得SQL服务器提供了事务控制优点,尤其是当那些控制是非标准的时。
SQL PASS THROUGHMODE 描述BDE和传递式SQL是否共享相同的数据库联接。在大多数情况下,SQLPASSTHROUGHMODE被设置SHARED AUTOCOMMIT。然而,如果你想将SQL事务控制传递给服务器,你就必须用BDE配置工具,将BDE的SQLPASSTHROUGHMODE 设置为NOT SHARED。此外,还必须为传递SQL事务控制表达式的TQuery部件建立独立的TDatabase 部件。
3. 使用本地事务
BDE还支持Paradox和dBASE上的本地事务。从代码角度而言,在本地事务和远程数据库服务器的事务之间没有什么差别。
当作用于本地数据库表的事务开始时,更新操作被记录在日志中,每个日志记录包含旧的记录缓冲区。当事务处于活跃状态,更新的记录被锁定,直到事务被提交或返转,在返转过程中,旧的记录被应用于将更新的记录恢复到原先的状态。
18.3.3 使用存储过程
18.3.3.1 TStoredProc部件概述
存储过程是以数据库服务器为基础的接受输入参数,并将结果返回给应用程序的一段程序。TStoredProc部件操作远程服务器上的数据库中的存储过程。存储过程是一连串表达式的集合,作为服务器的一部分存储。存储过程在服务器上执行一系列重复性的与数据库相关的任务,并将结果传给客户应用程序,如Delphi数据库应用程序。
TStaredProc部件使Delphi数据库应用程序能执行服务器上的存储过程。
通常,作用于数据库表中大量记录并且使用统计或数学函数的操作都是存储过程的首选对象。通过将这些重复计算任务转移到服务器,可以提高数据库应用程序的性能。
● 充分利用服务器的处理能力和速度
● 减少网络传输的数量
例如,考虑一个需要计算单个值的应用程序,在大批记录中的标准差值。如果在Delphi应用程序中执行这项功能就必须从服务器中得到所有在计算中用到的记录,这必将导致网络拥塞。因为应用程序所需的只是代表标准差的最终返回值。因此,由服务器上的存储过程来读数据,执行计算和将值传给应用程序将更有效。
1. TSoredProc的关键属性
⑴ DatabaseName属性
DatabaseName属性描述要访问的数据库的名字。该属性可以为:
● 已定义的BDE别名
● 本地型数据库的目录
● Local InterBase服务器的目录路径和文件名
● TDatabase定义的应用程序别名
在改变DatabaseName之前要使用Close方法将Dataset部件置为非活跃状态。
⑵ StoredProcName属性
StoredProcName属性表示服务器上的存储过程名。Oracle服务器允许多个具有相同名字的存储过程。因此要设置Overload属性来描述执行在Oracle服务器上的存储过程名。
⑶ Overload属性
Oracle服务器允许Oracle软件包中存储过程的重载。就是说具有相同名字的不同过程,设置Overload属性用来描述执行在Oracle服务器上的存储过程。如果Overload值为零,则假定没有重载,如果Overload为1,则Delphi执行具有同名的第一个存储过程;如果值为2,则执行第二个存储过程。
⑷ Params属性
Params属性包含传给存储过程的参数。
2. 关键方法
⑴ ParamByName方法
声明:function ParamByName(const Value: String): TParam;
ParamByName方法返回Params属性中具有名为Value的元素值。一般用该方法在动态查询中给参数赋值。
⑵ Prepare方法
PrePare方法准备要执行的存储过程,这允许服务器载入存储过程,否则准备处理异常。
⑶ ExecProc方法
ExecProc方法执行服务器上的存储过程。
⑷ Open方法
Open方法打开DataSet部件,并将其置于浏览状态。这相当于将Active属性置为True。对于TStoredProc如果存储过程返回一个结果集,则使用Open执行存储过程。如果存储过程返回单行,早使用ExecProc执行存储过程。
18.3.3.2 TStoreProc使用方法
1. 建立一个StoredProc部件
为数据库服务器上的存储过程建立一个TStoredProc部件的步骤如下:
⑴ 从Component Palette的Data Access页选择TStoredProc部件放在数据模块上。
⑵ 将TStoredProc部件的DatabaseName属性设置为存储过程所在的数据库名。
DatabaseName必须是BDE别名。
⑶ 将TStoredProc部件的StoredProcName属性设为所用的存储过程名,或者从下拉式
列表框中选择。
⑷ 在TStoredProc部件的Params属性中描述输入参数。可以使用参数编辑器来设置输
入参数。参数编辑器也可让用户察看存储过程返回给应用程序的值。
2. 设置存储过程的输入参数,察看输出结果参数
许多存储过程需要给它们传入一系列的输入参数,以确定处理什么和怎样处理,在Params属性中描述这些参数。所描述的输入参数的顺序是很重要的,它由服务器上的存储过程来确定。在设计时,最容易和最安全的方法是激活TStoredProc参数编辑器,编辑输入参数。参数编辑器以正确的次序列出输入参数,让你给它们赋值。
要激活TStoredProc的参数编辑器:
① 选择TStoredProc部件。
② 按鼠标右键激活加速菜单(Speed Menu)。
③ 选择Define Parameters。
参数名列表框显示过程的所有输入,输出和结果参数。有关输入、输出参数的信息从服务器中获得。对于某些服务器而方,参数信息是不可访问的,如Sybase,在这种情况下,列表框是空的,因此必须自己按过程要求的顺序增加输入输出参数。
参数类型复选框中描述所选的参数是输入、输出,还是结果参数。如果服务器支持参数可以既是输入又是输出。如果在列表框中增添参数,就必须设置参数类型。
数据类型复选框,列出列表框中所选参数的数据类型。如果给列表框真善美参数,必须设置数据类型。
在值编辑框中给输入参数赋值。
如果服务器不传递存储过程信息给Delphi,则可以用Add按钮给存储过程增添参数。Delete按钮则是将增添的参数删除,Clear按钮将清除列表框中所有参数。
设置完参数后,选择OK按钮。
3. 在运行时建立参数和参数值
在运行时建立参数,可直接访问Params属性。Params属性是参数字符串的数组。例如,下列代码将编辑框的文本赋给数组的第一个字串:
StaredProc1.Params[0].Asstring := Edit1.Text
也能够用ParamsByName方法通过名字访问参数:
StoredProc1.ParamsByName('Company') Asstring := Edit1.Text;
4. 准备和执行存储过程
要使用存储过程还必须准备并执行它。可以有两种方式准备一个存储过程:
● 在设计时,通过选择参数编辑器的OK按钮
● 在运行时,通过调用TStoredProc的Prepare方法
例如,下面的代码准备存储过程的执行:
StoredProc1.Prepare;
要执行准备好的存储过程,调用TStroedProc部件的ExecProc方法。下列代码演示了准备和执行存储过程:
StoredProc1.Params[0] Asstring := Edit1.Text;
StoredProc1.prepare;
StoredProc1.ExecProc;
当你执行一个存储过程,它返回输出参数或结果集,有两种可能的返回类型:单个返回,如单值或值集,和一群结果集,返回很多值。
相关推荐:2010年9月计算机等级考试试题及答案解析专题北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |