VFP數(shù)據(jù)庫觸發(fā)技術(shù)的應用實例

字號:

表跟蹤問題的提出:
    在管理信息系統(tǒng)的正常運行中,信息的安全性問題日益突出。雖然網(wǎng)絡為我們提供了一定的數(shù)據(jù)安全性,只有授權(quán)的用戶才能對數(shù)據(jù)進行日常的維護,但有時用戶的誤操作可能導致數(shù)據(jù)的丟失或混亂;另外,有時我們需要對數(shù)據(jù)的改動留下記載等。對重要的數(shù)據(jù)文件,記錄每一個數(shù)據(jù)變化的審核日志,對其建立其相應的日志表來跟蹤對它的增、刪和修改操作是十分必要的。日志表中記載了何時、何用戶進行了何種操作,記載了被用戶增加或刪除的記錄信息,以及被修改記錄的原來信息和修改后的信息,將被操縱過的記錄進行備份。
    VFP觸發(fā)技術(shù):
    Visual Foxpro與它的前期版本重大差別之一是使用了數(shù)據(jù)庫(Database)這一強大功能,使之成為一個真正的DataBase。VFP的Database Container包含了表(Table)及表的各種屬性定義,也包含了屬于后端的SQL中的觸發(fā)技術(shù)(Trigger)。
    Trigger的使用為Database中的Table提供了一個記錄級規(guī)則(即檢測程序)。Trigger分為Insert Trigger、Update Trigger和Delete Trigger三種操作。Insert Trigger用于Table新增記錄時所觸發(fā)的檢測程序,Update Trigger用于Table修改記錄回存時所觸發(fā)的檢測程序,Delete Trigger用于Table中記錄被刪時所觸發(fā)的檢測程序。VFP允許對任一種操作設定不同的規(guī)則,該規(guī)則可以是表達式或用戶自定義函數(shù)(UFD),若響應為真值時,表示觸發(fā)成功,若響應為假值時,表示觸發(fā)失敗。用戶自定義函數(shù)(UFD)存儲在Database Container中。
    創(chuàng)建觸發(fā)器有兩種方式:
    1) 打開表屬性”對話框,在 INSERT、UPDATE 或 DELETE 觸發(fā)器框中,輸入觸發(fā)器表達式或用戶自定義函數(shù)(UFD);
    2) 使用 CREATE TRIGGER 命令。
    創(chuàng)建、修改或移去存儲過程有三種方式:
    1) 在項目管理器中,選擇并展開一個數(shù)據(jù)庫,選定“存儲過程”,然后選擇“新建”、“修改”或“移去”按鈕;
    2) 在數(shù)據(jù)庫設計器中,從“數(shù)據(jù)庫”菜單中選擇“編輯存儲過程”按鈕;
    3) 在COMMAND命令窗口中,使用 MODIFY PROCEDURE 命令。
    表跟蹤設計:
    利用Insert Trigger、Update Trigger和Delete Trigger三種操作原理,我們可以構(gòu)造備份被操縱記錄的用戶自定義函數(shù),并將其加入需要進行表跟蹤的數(shù)據(jù)文件Trigger中,以實現(xiàn)表跟蹤。這樣,不論用戶使用程序進行對此表的操縱或直接打開此表進行增刪和修改記錄,都能激發(fā)Trigger將被操縱記錄進行日志記載。
    本人構(gòu)造了四個通用的自定義函數(shù),Inslog()、Dellog()、Modlog()和addlog(),存放于Database Container的存儲過程中。在需要進行表跟蹤的數(shù)據(jù)文件的Insert Trigger、Delete Trigger和Update Trigger中分別加入Inslog()函數(shù)、Dellog()函數(shù)和Modlog()函數(shù),以使對數(shù)據(jù)文件中記錄的增、刪和修改均激發(fā)Trigger進行日志記載。addlog()用于建立被跟蹤表的日志表結(jié)構(gòu),日志表的結(jié)構(gòu)設計包含了被跟蹤表的所有字段信息,并且增加了用戶標志opid、操作日期時間optime和操作標志opmak字段。日志表的命名規(guī)則為被跟蹤表的表名前加‘L’,以示區(qū)分,另外本人在存放數(shù)據(jù)文件目錄下另設子目錄LOGDBFS,專用于存放日志表以便管理。