网站建设| 数据库类| 图形图象| 程序设计| 现代办公| 操作系统| 考试认证| 网络技术| 软件工程| 电脑相关| 文学作品
网站开发| 网页制作| 操作系统| 图象图形| 考试认证| 数据库类| 程序设计| 硬件技术| 现代办公| 网络技术| 笑话频道
 
您的位置: 电脑书库首页-> 电脑文摘-> 数据库类-> Foxpro-> VFP表跟踪实现方法

VFP表跟踪实现方法
作者:佚名 来源:InterNet 加入时间:2005-1-31
相关文章
  • 如何用VFP的dbf进行SQL Server 7.0 的分布式查询
  • VFP智能感应的二次开发
  • 在VFP5.0中实现中英文自动切换
  • 在VFP中实现跟变式组合框及椭圆图形菜单
  • VFP中实现在浏览器中运行应用程序方法
  • 在VFP中模拟动画
  • 在VFP报表中实现每页打印指定记录数
  • 让VFP程序在浏览器中运行
  • 分发VFP应用时自动建立快捷方式
  • VFP右键功能
  • 相关书籍:

    摘要 本文介绍了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三种操作原理,我们可以构造备份被操纵记录的用户自定义函数,并将其加入需要进行表跟踪的数据文件Trigger中,以实现表跟踪。这样,不论用户使用程序进行对此表的操纵或直接打开此表进行增删和修改记录,都能激发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)
    RETURN


    [文章录入员:nancy]

    相关文章
  • 如何用VFP的dbf进行SQL Server 7.0 的分布式查询
  • VFP智能感应的二次开发
  • 在VFP5.0中实现中英文自动切换
  • 在VFP中实现跟变式组合框及椭圆图形菜单
  • VFP中实现在浏览器中运行应用程序方法
  • 在VFP中模拟动画
  • 在VFP报表中实现每页打印指定记录数
  • 让VFP程序在浏览器中运行
  • 分发VFP应用时自动建立快捷方式
  • VFP右键功能
  • 相关书籍:
    本站推荐内容

    近期主机类热搜关键词:
    美国服务器 美国服务器租用 海外服务器租用 国外服务器租用

    Foxpro
    ACCESS
    MS SQL
    MySQL
    Oracle
    Foxpro
    PowerBuilder
    Sybase
    其它
    电脑教程阅读排行
    ·Visual FoxPro 9....
    ·VFP与Excel交互编程
    ·Visual Foxpro生成任...
    ·VFP访问外部数据源的几种方法
    ·为Visual FoxPro应用...
    ·如何用VFP的dbf进行SQL ...
    ·如何修复被破坏的Foxpro数据...
    ·用VFP6.0编写图片浏览器
    ·在VFP报表中实现每页打印指定记...
    ·利用Foxpro在网络环境下开发...