Delphi”程序级触发器”功能的实现_第1页
Delphi”程序级触发器”功能的实现_第2页
Delphi”程序级触发器”功能的实现_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Delphi”程序级触发器”功能的实现 发表:不详 阅读:75次 关键字: 字体:大 中 小 在Delphi的数据集控件中,提供了类似关系数据库管理系统中触发器功能的事件机制-触发器类事件。灵活使用数据集控件的此类事件,能够实现程序级的触发器功能,以加强数据的完整性检验。 以Delphi中表数据集为例,其相应的触发器类事件: 事件名称 说明 BeforeInsert, AfterInsert 插入记录前后调用的事件 BeforeEdit, AfterEdit 编辑前后调用的事件 BeforePost, AfterPost 保存数据前后调用的事件 BeforeDelete, AfterDelet

2、e 删除前后调用的事件 BeforeCancel, AfterCancel 取消编辑前后调用的事件 BeforeOpen, AfterOpen 打开数据集前后调用的事件 BeforeClose, AfterClose 关闭数据集前后调用的事件 OnNewRecord 新记录产生时调用的事件 OnCalcField 当计算字段被计算时调用的事件 OnFilterRecord 启动过滤后,数据集内每条记录都调用此事件 事件使用举例: 1 更改Delphi中DbNavigator控件默认的删除对话框 设置DbNavigator的ConfirmDelete属性为False,在Table控件的Befor

3、eDelete事件中编写如下代码: if Application.MessageBox(确实要删除当前记录吗?, 删除 确认, mb_YesNo + mb_IconWarning Id_Yes then Abort; file:/利用哑异常阻止删除事件发生 2在记录保存前检验数据的完整性,以及连锁更新相关表中的数据,实现数据完整性检验可通过表数据集控件的BeforePost事件检验: file:/GetNowCardMount为自定义函数(举例,假设其取得当前凭证的实际库存量 if Table1.FieldByName(OutCardMount.AsInteger GetNowCardMoun

4、t then Application.MessageBox(当前输入凭证的下发数量超过该种凭证的实际库存量!, 错误, Mb_Ok + Mb_IconError; Abort; file:/利用哑异常阻止数据保存,从而,使光标仍停留在当前行继续编辑 else file:/如果需要连锁更新的话 UpdateProc; file:/假设的一连锁更新相关表数据的过程 3表数据集打开之前检验用户是否具有对当前表的访问权 在表数据集的BeforeOpen事件中编写如下代码: if Not CanVisit(UserName, TableName then file:/CanVisit假设函数,检验用户对

5、表是否有访问权 begin Application.MessageBox(当前用户无足够权限访问当前数据!, 信息, Mb_Ok + Mb_IconInformation; Abort; file:/阻止 当前表被打开 end; 4关闭表数据集前提示保存数据,防止数据丢失 在表数据集的BeforeClose事件中编写如下代码: if Table1.State in dsEdit, dsInsert then file:/当前数据被修改或是新插入的记录 case Application.MessageBox(当前数据尚未保存,是否保存后再关闭?, 保存 确认, Mb_YesNoCancel +

6、Mb_IconQuestion of Id_Yes : AdoTable1.Post; file:/保存数据 Id_No : ; file:/不保存 Id_Cancel: Abort; file:/取消关闭事件 end; 其它事件编程略。 Delphi的数据集控件给程序开发人员提供了灵活的前端数据完整性检验的机制 (作者 陈立平) 在Delphi的数据集控件中,提供了类似关系数据库管理系统中触发器功能的事件机制-触发器类事件。灵活使用数据集控件的此类事件,能够实现程序级的触发器功能,以加强数据的完整性检验。 以Delphi中表数据集为例,其相应的触发器类事件: 事件名称 说明 BeforeIn

7、sert, AfterInsert 插入记录前后调用的事件 BeforeEdit, AfterEdit 编辑前后调用的事件 BeforePost, AfterPost 保存数据前后调用的事件 BeforeDelete, AfterDelete 删除前后调用的事件 BeforeCancel, AfterCancel 取消编辑前后调用的事件 BeforeOpen, AfterOpen 打开数据集前后调用的事件 BeforeClose, AfterClose 关闭数据集前后调用的事件 OnNewRecord 新记录产生时调用的事件 OnCalcField 当计算字段被计算时调用的事件 OnFilte

8、rRecord 启动过滤后,数据集内每条记录都调用此事件 事件使用举例: 1 更改Delphi中DbNavigator控件默认的删除对话框 设置DbNavigator的ConfirmDelete属性为False,在Table控件的BeforeDelete事件中编写如下代码: if Application.MessageBox(确实要删除当前记录吗?, 删除 确认, mb_YesNo + mb_IconWarning Id_Yes then Abort; file:/利用哑异常阻止删除事件发生 2在记录保存前检验数据的完整性,以及连锁更新相关表中的数据,实现数据完整性检验可通过表数据集控件的Be

9、forePost事件检验: file:/GetNowCardMount为自定义函数(举例,假设其取得当前凭证的实际库存量 if Table1.FieldByName(OutCardMount.AsInteger GetNowCardMount then Application.MessageBox(当前输入凭证的下发数量超过该种凭证的实际库存量!, 错误, Mb_Ok + Mb_IconEr ror; Abort; file:/利用哑异常阻止数据保存,从而,使光标仍停留在当前行继续编辑 else file:/如果需要连锁更新的话 UpdateProc; file:/假设的一连锁更新相关表数据的

10、过程 3表数据集打开之前检验用户是否具有对当前表的访问权 在表数据集的BeforeOpen事件中编写如下代码: if Not CanVisit(UserName, TableName then file:/CanVisit假设函数,检验用户对表是否有访问权 begin Application.MessageBox(当前用户无足够权限访问当前数据!, 信息, Mb_Ok + Mb_IconInformation; Abort; file:/阻止当前表被打开 end; 4关闭表数据集前提示保存数据,防止数据丢失 在表数据集的BeforeClose事件中编写如下代码: if Table1.State in dsEdit, dsInsert then file:/当前数据被修改或是新插入的记录 case Application.MessageBox(当前数据尚未保存,是否保存后再关闭?, 保存 确认, Mb_YesNoCan

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论