分享:在PF中新增字段而不用重新编译的方法

发表于:2007-05-26来源:作者:点击数: 标签:
在实际应用中,一个PF中往往含有大量数据,但是由于开发需要在PF中新增字段。在印象中改完之后我们一般是重编译,至少我以前这样认为,呵呵。但这样数据不保。当然也可以用cpyf把数据拷贝出来,加完字段后再把数据拷贝回去。而事实上,只要用chgpffile(PF)sr

在实际应用中,一个PF中往往含有大量数据,但是由于开发需要在PF中新增字段。在印象中改完之后我们一般是重编译,至少我以前这样认为,呵呵。但这样数据不保。当然也可以用cpyf把数据拷贝出来,加完字段后再把数据拷贝回去。而事实上,只要用chgpf file(PF) srcfile (LIB/SRC-PF) lvlchk (*no)这个命令就可以不用重新编译并且把新字段加入到PF中去了。另外涉及到该PF的LF也要用chglf命令进行修改。

 xuguopeng 回复于:2004-11-04 19:53:39
如果我没理解错,你的意思是说修改了PF的结构可以不重新编译??

不可能吧??明天我去试试

LEVEL CHECK也起这个作用?

 magket 回复于:2004-11-04 20:08:47
是不是真的啊,大家用了这么久怎么都不知道呢?
问题是这样加完,用到这个表的程序要不要改呢?

 hanyu 回复于:2004-11-05 08:47:25
是的,一旦修改一个PF lvlchk (*no),所有用到该文件的程序,都不会再检查Record Format level identifier,也就是不会有lvlchk 报错。
在作业这一层,可以用ovrdbf  FILE(XXXX) LVLCHK(*no)临时取消。

 xuguopeng 回复于:2004-11-05 09:15:28
不错 试过了 果然灵~~  加精~

好久没有看到这种小技巧了

 winner_530 回复于:2004-11-05 09:43:33
这个命令是可以向数据库追加多个新字段,但不能在任何两个已存在的字段中间加入一个新的字段吧!?
还有这个命令是不能改变字段类型的吧!?
而且如果该数据库中有P类型的字段时,这样操作是会使该类型字段的数据记录出现乱码的吧!?

 qingzhou 回复于:2004-11-05 09:50:27
不新鲜了。。。

<当物理文件发生改变时,是否有方法让程序不用重新编译?>---newbiezhang
[url]http://www.chinaunix.net/jh/10/136017.html[/url]

 tom9030 回复于:2004-11-05 09:55:14
[quote:e77b120e13="winner_530"]这个命令是可以向数据库追加多个新字段,但不能在任何两个已存在的字段中间加入一个新的字段吧!?
还有这个命令是不能改变字段类型的吧!?
而且如果该数据库中有P类型的字段时,这样操作是会使该类型字段的数据?.........[/quote:e77b120e13]

应该不能在任何两个已存在的字段中间加入一个新的字段!

[quote:e77b120e13]
不新鲜了。。。 
<当物理文件发生改变时,是否有方法让程序不用重新编译?>---newbiezhang 
http://www.chinaunix.net/jh/10/136017.html 
[/quote:e77b120e13]

可惜我没早看到这个帖子, :lol:

 暴走族 回复于:2004-11-05 10:16:55
呵呵,我还以为是不用重编译RPG程序的方法呢

 winner_530 回复于:2004-11-05 11:22:52
因为我以前就这么做的,发现这是一个杀鸡取卵的办法,不能真正用在实际的生产环境中的,否则会给系统带来难以预料的隐患的!
这种方法可以当作一个技巧收藏,但劝大家不要用在生产环境中呀!对于程序员来说还稍稍好一点,但对一个系统管理员来说就不好玩了!
当然这是我得个人见解!

 xuguopeng 回复于:2004-11-05 12:03:49
当然 生产环境我都不允许有LEVEL CHECK改为*NO的

 bpcsusr 回复于:2004-11-05 12:50:23
CHGPF是对某些改变不必重编译,但也要看OS的版本,以前在3版本上应该不可以,但我在V4R4上根据用户要求该属性时是比较好用的.

 ar6400 回复于:2004-11-05 15:35:11
确实要慎用。没有太多实用意义。
在开发小组里,谁要是这么做了,一定要害死一大堆人。

 michael9406 回复于:2004-11-05 16:27:09
yes, use the chgpf command.

 Frank.Fan 回复于:2004-11-05 16:42:07
不错,我正好要改一个在用的PF字段的大小。

另外,我现在发现我现在的400上没有DSPFLD这个命令,不知能否直接将这个命令copy上去用。

 ╰●-●╯ 回复于:2004-11-05 16:45:43
請教一下,Level Check改為*NO會給資料造成什麼損害呢?

因為我們有一些PF確實是這樣去用的!

如果這樣會造成損害,為何IBM會允許使用者去修改Level Check項目呢?

學習中,請各位指教,謝謝!

 xuguopeng 回复于:2004-11-06 15:01:27
我个人比较肤浅的理解:

如果一个程序使用了PF,DSPF,RPG等等吧

那么理论上最合理的应该是先有FILE,然后再有PGM

如果我修改了FILE,FILE的创建日期会比PGM的新,系统就会LEVEL CHECK(也就是说系统会检验PGM以及FILE的创建时间)

解决的办法就是重新编译PGM(使他的创建时间更新)

如果使用一个FILE的PGM有N个,重新编译的工作量很大,临时的解决方法就是LEVEL CHECK改为*NO

现在我还不知道LEVEL CHECK改为*NO的后果,也不敢尝试 ,呵呵

有经验的大虾出来讲解一下吧

 moonlight 回复于:2004-11-06 17:25:59
所以在设计PF时应在最后几位多预留一些字段以备不时之需。至于在PF中间临时加字段的习惯也很不好,字段顺序似可考虑利用LF整合。

 michael9406 回复于:2004-11-07 10:42:24
需要些时日,AS400中的数据库也不需要更改过字段,或者增加过字段,或者更改字段属性后重编译RPG了。。。。

我们试目以待

原文转自:http://www.ltesting.net