免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4772 | 回复: 13
打印 上一主题 下一主题

空的屏幕文件里新增第一条记录出错 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-29 17:12 |只看该作者 |倒序浏览
初始化屏幕:
  1. CSR   #ClrSfl       BEGSR                                            
  2. C                   SETON                                        80  
  3. C                   WRITE     @@SFLC                                 
  4. C                   SETOFF                                       80  
  5. C                   Z-Add     0             wNum              6 0   
  6. C                   Z-Add     0             RRN                     
  7. C                   Z-Add     0             @@SFPG                  
  8. CSR                 ENDSR                                            
复制代码
在屏幕文件里加一个判断无记录的语句:
  1. C                   If        wNum       <= 0         
  2. C                   Eval      RRN         = 1         
  3. C                   Write     @@SFL                    
  4. C                   EndIf                              
复制代码
新增记录用:
  1. C                   Add       1             wNum      
  2. C                   Eval      RRN         = wNum      
  3. C                   Eval      @@SFPG      = wNum      
  4. C                   Write     @@SFL                    
  5. C                   Exfmt     @@WIDSUC                 
复制代码
这样的话,如果屏幕文件开始是空的,则新增第一条记录时会给出出错信息:
Attempt to write a duplicate record to file PGTSTDSP@ (C G D F).

请教各位大牛如何解决,谢谢!!

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-05 06:20:00
2 [报告]
发表于 2012-08-29 20:17 |只看该作者
Attempt to write a duplicate record to file PGTSTDSP@ (C G D F).

看错误啊,重复记录问题

论坛徽章:
0
3 [报告]
发表于 2012-08-29 21:22 |只看该作者
对啊,问题就在这里,明明是写入第一条记录,却说重复,我想问题出在RRN上,因屏幕文件原来是空的,而给RRN一个初值1,这时写第一条记录时RRN又被赋值为1,所以报这个错。

论坛徽章:
1
天蝎座
日期:2014-07-20 17:37:17
4 [报告]
发表于 2012-08-29 23:50 |只看该作者
rrn=1的时候write了两次

论坛徽章:
0
5 [报告]
发表于 2012-08-30 08:33 |只看该作者
是啊,我也知道RRN=1时,Write了两次,但屏幕无记录,RRN=0会报错,只得用
  1. 01.C                   If        wNum       <= 0         

  2. 02.C                   Eval      RRN         = 1         

  3. 03.C                   Write     @@SFL                    

  4. 04.C                   EndIf                              
复制代码
写一个空的记录进去,这样造成向屏幕文件写第一条记录时,给出重复写记录的错误,
请问谁有好的方法解决这个问题,谢谢!!

论坛徽章:
0
6 [报告]
发表于 2012-08-30 09:41 |只看该作者
回复 5# 燕麦玉米粥


    这个问题解决办法有好多种。1 写第一条非空记录的时候,先clear subfile,然后再写。
   2,可以定位到第一条记录,然后用update subfile,不用write。
   3,写记录的时候,可以用RRN + 1来赋值,不用 eval  RRN = num。

   反正你已经知道问题的所在,解决起来应该不难吧

论坛徽章:
0
7 [报告]
发表于 2012-08-30 12:48 |只看该作者
回复 6# niuhua77

谢谢楼上!!
用你说的第一种方法先清屏,再写第一条记录,是可以的。
第二种方法,Update会给出:
Update or delete in file PGTSTDSP@ without prior input operation (C G D F).
第三种方法,我觉得RRN=RRN+1,不妥,因为本来是没有记录嘛,写第一条非空记录做为第一条记录,不想把空记录做为记录算进去。

请路过的大伙指点!谢谢!

论坛徽章:
0
8 [报告]
发表于 2012-08-30 19:44 |只看该作者
不用那么麻烦没有 数据的话  直接不用写SFL  在 SFLDSP这个关键的指针关掉就OK  显示不会报错的。

论坛徽章:
0
9 [报告]
发表于 2012-08-30 21:31 |只看该作者
楼上正解,一般都这么处理的

论坛徽章:
0
10 [报告]
发表于 2012-08-31 08:55 |只看该作者
回复 8# xjromance
谢谢楼上!!可是关掉SFLDSP什么时候打开呢?空屏进去,无法加进新纪录了,给出错误:
Session or device error occurred in file PGTSTDSP@ (C G D F).  


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP