关于更新文件的一对多问题.
在做练习时,一直有个问题想不过去!!
1、当要完全新加一条记录时,我给所有的字段全部赋值后,write file1,结果是说记录更新又删除,不明白!!!(不给加)
2、在update文件的1对多时,比如我要更新key等于为@key的值在数据库中有4条记录(这里当然存储数据库的时候还有个字段决定key):
我要更新的key是klist fld1(数据库中的主码是klist fld1),ZAGAF是记录格式名.
fld2
现在更新记录,更新的永远都是第一条记录,无法全部更新,不知道为什么?(这里没办法,我现在用insert和update<sqlrpgle>)代替了.
我用的是key chain ZAGAP 7138
DOW *in71=*off
move XXX fld1
move XXX FLD2
........
UPDATE ZAGAF
DOU *IN38=*OFF
KEY READE ZAGAP 3871
ENDDO
ENDDO
这是一直困扰我的2个问题,高手帮帮忙,谢谢.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
问题大概解决了,不过更新记录用RPGLE还是无法实现,更新的始终是第一条记录。
其实就是想个办法用RPGLE来代替以下的SQLRPGLE
C/EXEC SQL
C+ UPDATE ZAGAP SET
C+ GAEFYY=:YEAR,GAEFMM=:MONTH,GAEFDD=AY,
C+ GAORMM=:MONTH1,GAORDD=AY1,GAORYY=:YEAR1,
C+ GADTYP=:KADTYP,GATRTO=:KATRTO,GAORBY=:KAORBY,
C+ GAA1AX=:KAA1AX,GAA2AX=:KAA2AX,GAA3AX=:KAA3AX
C+ WHERE GATOUR=:LATOUR
C+ WITH NC
C/END-EXEC
那个write记录的问题是:
key chain file 71
if *in71=*on
write file
endif
if *in71=*off
delete/update file
endif
这样写(write出错了)不行,改成
key chain file 71
if *in71=*on
write file
else
delete/update file
endif
这样就OK了,可能就是UF A和IF A的问题吧.
谢谢大家.
你不适合写文件型数据库处理程序。
本帖最后由 bjrichard 于 2010-06-22 14:49 编辑
一。如果只是寫入 不需要UF A,只需要A或者 IF A
二 KEY SETLL ZAGAP 38
if *IN38=*OF
leave
endif
KEY READE ZAGAP 71
DOW *in71=*off
move XXX fld1
move XXX FLD2
........
UPDATE ZAGAF
KEY READE ZAGAP 71
ENDDO
如果字段赋值是正确的,那么程序在做write时如果写入进系统会报错,你怎提示什么错误了吗?两个问题检查一下:文件是否做了大小的限制;字段赋值是否正确!
文件有A,声明为UF A 的..呵呵
我也不喜欢,也不明白那个dou *in38=*off做什么的,老外的程序它这样写,我也没办法...
再帮个忙啊...我连新加记录都不行,
key chain ZAGAP
if not %found(ZAGAP)
move XXX fld1
........
write zagap
else
.....(delete or update)这个我做出来了,没问题.
write不行.
不让添加记录的话,看看你定义文件时候有没有声明为"A"啊。
不明白你设了38指示器又没有做处理是为了什么。
如果真出错的话,很应该让程序报死啊,要不你就添加一段报错处理的代码呀。
我的第二个循环是用来check数据是否出错的,只执行一次而已哦.
顺便问下,怎么新增一条记录,直接给所有字段move值后,马上write file不行,这里需要注意些什么?
本身程序就有问题,它一直在第二个循环里直到71亮。结果就只更新第一条记录啦。
可以更改为:
key chain ZAGAP 7138
DOW *in71=*off
if *IN38=*On
leave
endif
move XXX fld1
move XXX FLD2
........
UPDATE ZAGAF
KEY READE ZAGAP 3871
ENDDO