Progress 4GL中哪些改动会影响CRC?df文件操作对CRC匹配影响问询
Progress 4GL 表CRC与DF文件操作问题解答
Progress 4GL 中的表CRC是数据库表结构的唯一校验值,编译.p程序时会将关联表的CRC写入生成的.r文件,运行时会校验两者是否一致,不一致会抛出运行错误。
一、对表CRC有影响/无影响的改动清单
- 会触发CRC值变更的改动:
- 新增、删除、修改表的字段核心属性:包括字段名、数据类型、长度、小数位数、初始值、必填标识等
- 新增、删除、修改表的索引定义:包括索引关联字段、排序规则、唯一属性、主键标识等
- 修改表本身的核心属性:包括表名、存储区域、分区配置、是否开启审计等核心参数
- 不会触发CRC值变更的改动:
- 调整字段或表的展示类属性:比如label、tooltip、显示格式等
- 新增、修改、删除表或字段的注释信息
- 调整表的访问权限配置
- 新增、删除、修改表的触发器定义(极个别老旧版本存在例外,主流版本均无影响)
二、两类DF文件加载操作的影响
1、首次加载新的xxbd_det.df文件到数据库并编译.p文件的结果
加载.df文件会在数据库中按照文件定义创建
xxbd_det表,加载完成后表的CRC值与.df文件中记录的结构CRC完全一致。
后续编译关联的.p程序时,编译器会读取数据库中xxbd_det的实际CRC写入生成的.r文件,此时.r与表的CRC完全匹配,运行不会出现CRC校验错误。
2、删除xxbd_det表后重新加载同一.df文件的结果、已有.r文件CRC匹配情况
只要两次加载的是完全未被修改的同一份
xxbd_det.df文件,删除原表重新加载后,新生成的xxbd_det表CRC和删除前的CRC完全一致。
之前编译生成的.r文件中存储的CRC会和新表的CRC完全匹配,无需重新编译.p程序即可正常运行。
注意特殊例外:如果.df文件被手动改动、或者加载时数据库的代码页、排序规则和首次加载时不一致,可能出现CRC不匹配的问题,这种情况需要重新编译所有关联的.p程序
内容的提问来源于stack exchange,提问作者Bharat
相关产品推荐
相关产品推荐

