转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件使用 >> 常用软件 >> 正文
VFP表跟踪日志的实现方法         

VFP表跟踪日志的实现方法

作者:闵涛 文章来源:闵涛的学习笔记 点击数:612 更新时间:2009/4/24 21:43:28
? 本文介绍了Visual Foxpro中数据库触发技术的应用实例,为VFP表建立跟踪日志,提供解决网络多用户环境中数据文件安全的一种方法。
关键词 触发技术,表跟踪,自定义函数
  表跟踪问题的提出:
  在管理信息系统的正常运行中,信息的安全性问题日益突出。虽然网络为我们提供了一定的数据安全性,只有授权的用户才能对数据进行日常的维护,但有时用户的误操作可能导致数据的丢失或混乱;另外,有时我们需要对数据的改动留下记载等。对重要的数据文件,记录每一个数据变化的审核日志,对其建立其相应的日志表来跟踪对它的增、删和修改操作是十分必要的。日志表中记载了何时、何用户进行了何种操作,记载了被用户增加或删除的记录信息,以及被修改记录的原来信息和修改后的信息,将被操纵过的记录进行备份。
VFP触发技术:
  Visual Foxpro与它的前期版本重大差别之一是使用了数据库(Database)这一强大功能,使之成为一个真正的DataBase。VFP的Database Container包含了表(Table)及表的各种属性定义,也包含了属于后端的SQL中的触发技术(Trigger)。
  Trigger的使用为Database中的Table提供了一个记录级规则(即检测程序)。Trigger分为Insert Trigger、Update Trigger和Delete Trigger三种操作。Insert Trigger用于Table新增记录时所触发的检测程序,Update Trigger用于Table修改记录回存时所触发的检测程序,Delete Trigger用于Table中记录被删时所触发的检测程序。VFP允许对任一种操作设定不同的规则,该规则可以是表达式或用户自定义函数(UFD),若响应为真值时,表示触发成功,若响应为假值时,表示触发失败。用户自定义函数(UFD)存储在Database Container中。
  创建触发器有两种方式:
  1) 打开表属性”对话框,在 INSERT、UPDATE 或 DELETE 触发器框中,输入触发器表达式或用户自定义函数(UFD);
  2) 使用 CREATE TRIGGER 命令。
创建、修改或移去存储过程有三种方式:
  1) 在项目管理器中,选择并展开一个数据库,选定“存储过程”,然后选择“新建”、“修改”或“移去”按钮;
  2) 在数据库设计器中,从“数据库”菜单中选择“编辑存储过程”按钮;
  3) 在COMMAND命令窗口中,使用 MODIFY PROCEDURE 命令。
  表跟踪设计:
  利用Insert Trigger、Update Trigger和Delete Trigger三种操作原理,我们可以构造备 徊僮菁锹嫉挠没ё远ㄒ搴⒔浼尤胄枰斜砀俚氖菸募⺄rigger中,以实现表跟踪。这样,不论用户使用程序进行对此表的操纵或直接打开此表进行增删和修改记录,都能激发Trigger将被操纵记录进行日志记载。
  本人构造了四个通用的自定义函数,Inslog()、Dellog()、Modlog()和addlog(),存放于Database Container的存储过程中。在需要进行表跟踪的数据文件的Insert Trigger、Delete Trigger和Update Trigger中分别加入Inslog()函数、Dellog()函数和Modlog()函数,以使对数据文件中记录的增、删和修改均激发Trigger进行日志记载。addlog()用于建立被跟踪表的日志表结构,日志表的结构设计包含了被跟踪表的所有字段信息,并且增加了用户标志opid、操作日期时间optime和操作标志opmak字段。日志表的命名规则为被跟踪表的表名前加‘L,以示区分,另外本人在存放数据文件目录下另设子目录LOGDBFS,专用于存放日志表以便管理。这四个函数程序设计如下:

*Insert Trigger:
FUNCTION inslog()
m.path=substr(dbf(),1,rat(\,dbf()))
m. logname=m.path+LOGDBFS\L+SUBSTR(DBF(),LEN(m.path)+1)
IF NOT FILE(m.logname)
=addlog() &&建立日志表结构
ENDI
SCATTER MEMVAR
m.opmak=增 &&增加记录标志
m.opid=SYS(0) &&取网络用户标志
m.optime=datetime() &&增加记录时间
INSERT INTO (m.logname) ;
FROM MEMVAR &&记载所增记录
RETURN .T.

*Delete Trigger:
FUNCTION dellog()
m.path=substr(dbf(),1,rat(\,dbf()))
m. logname=m.path+LOGDBFS\L+SUBSTR(DBF(),LEN(m.path)+1)
IF NOT FILE(m.logname)
=addlog()
ENDI
SCATTER MEMVAR
m.opmak=删 &&删除记录标志
m.opid=SYS(0)
m.optime=datetime()
INSERT INTO (m.logname) ;
FROM MEMVAR &&记载所删记录
RETURN .T.

*Update Trigger:
FUNCTION modlog()
m.path=substr(dbf(),1,rat(\,dbf()))
m. logname=m.path+LOGDBFS\L+SUBSTR(DBF(),LEN(m.path)+1)
IF NOT FILE(m.logname)
=addlog()
ENDI
DIME alog[FCOUNT()+3]
alog[FCOUNT()+2]=SYS(0)
alog[FCOUNT()+3]=datetime()
alog[FCOUNT()+1]=修(原)
FOR i=1 TO FCOUNT()
alog[I]=oldval(field[I])
ENDFOR
INSERT INTO (m.logname) ;
FROM ARRAY alog &&记载更改前信息
alog[FCOUNT()+1]=修(现)
FOR i=1 TO FCOUNT()
alog[I]=EVALUATE(field[I])
ENDFOR
INSERT INTO (m.logname) ;
FROM ARRAY alog &&记载更改后信息
RETURN .T.

*建立日志表结构:
FUNCTION addlog()
*取被跟踪表字段
COPY STRU TO tmp EXTEND
*建立用户标志、操作时间和操作标志字段信息
INSERT INTO tmp.dbf ;
(field_name,field_type,field_len);
VALUES (OPMAK,C,6)
INSERT INTO tmp.dbf ;
(field_name,field_type,field_len);
VALUES (OPID,C,10)
INSERT INTO tmp.dbf ;
(field_name,field_type,field_len);
VALUES (OPTIME,T,8)
USE IN tmp
oldselect=SELECT() &&生成日志表结构
SELE 0
CREATE (m.logname) FROM tmp
DELETE FILE tmp.dbf
SELECT (oldselect)


[办公软件]在sybase中插入图片、PDF、文本文件  [办公软件]安装Sybase ASE
[办公软件]linux指令大全(完整篇)  [办公软件]Linux新手入门常用命令大全
[办公软件]在RedHat Linux 9里安装gaim0.80  [办公软件]浅谈Linux 下Java 1.5 汉字方块问题解决方法
[办公软件]Linux程序员必读:中文化与GB18030标准  [办公软件]linux指令大全
[办公软件]制作Linux启动盘的四种方法  [办公软件]Linux文件系统的反删除方法
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · 办公软件  · 系统软件
    · 常用软件  · 聊天工具
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台