*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)