2. 编写Trigger代码
先看下面的代码:
TRIGGER PROCEDURE FOR WRITE OF PT_MSTR OLD BUFFER OLD_PT_MSTR./*修改数据时的Trigger*/
TRIGGER PROCEDURE FOR DELETE OF PT_MSTR./*删除数据时的Trigger*/
如果Trigger设置OK,则.t文件最上面就会有上面的这行代码(其分别与 Write 和 Delete 对应),其表示当前被处理的这行记录,以第1行代码为例,PT_MSTR表示修改后pt_mstr中存的数据,而OLD_PT_MSTR表示在修改前pt_mstr中存的数据,后面要谈到的所有分析工作,都是针对这些数据进行的。
两个系统表的连接方式如下:
FOR EACH _File NO-LOCK WHERE _File._File-Name = "PT_MSTR",
EACH _Field NO-LOCK WHERE RECID(_File) = _Field._File-Recid
BREAK BY _Field._Order:
......
END.
5. 注意事项
a. 用EXPORT导出的数据会以_Field._Order的顺序进行排列,这也就是我们在第3步中进行排序的原因。
b. 对于数组类型的字段,在系统表中只会表示成一条记录,但在EXPORT中却会将每个值用“|”(我们在EXPORT代码中定义的分隔符)连接在一起进行输出,因此,需要辅助使用_Field._Extent这个字段。
c. 由于事务处理的影响,这套方案其实是有个很严重的Bug,就是F4问题,也就是说如果用户数据输入一半就按F4退出了,那么这套方案也会将取消前的数据导入到MySQL中,导致数据差异(其实,在前面实现思路的注释部分所提到的第2套方案,理论上应该可以解决这个问题)。