CREATE_RECORD或者NEXT_RECORD导致 FRM-40102 错误:记录必须首先被输入或者删除

在做Form开发中,经常会遇到需要在一个块中创建一条或者是多条数据。首先,一般我们会先定位到最后一条记录(有时候会先执行查询:app_find.find(‘BLOCK_NAME ‘);查询出需要的数据然后做最后一条记录的定位)。移动当前记录到最后一条记录可以使用下面的语法:

GO_BLOCK(‘BLOCK_NAME‘);    
FIRST_RECORD;    
LOOP    
  EXIT WHEN :SYSTEM.LAST_RECORD = ‘TRUE‘;    
      
  NEXT_RECORD;  --do_key(‘NEXT_RECORD’);    
END LOOP;  
或者是使用:

[html]
view plaincopyprint?
WHILE TRUE LOOP    
  IF :SYSTEM.LAST_RECORD <> ‘TRUE‘ THEN    
    NEXT_RECORD;    
  ELSE    
    EXIT;    
  END IF;    
END LOOP;  
在记录指向了块中的最后一条记录后,一般使用循环开始创建新记录:

[html]
view plaincopyprint?
FOR kpi_rec IN kpi_cur LOOP     
  CREATE_RECORD;    
  --对块中的项进行赋值    
END LOOP;   
注:也可以使用 NEXT_RECORD 代替 CREATE_RECORD。CREATE_RECORD是在当前记录的下方创建一条新记录,然后定位到这条新纪录上,而 NEXT_RECORD 如果是最后一条记录的话,则会自动创建一条新纪录。

用这样的方法创建一条新纪录是没问题的,但是如果连续创建两条新纪录,则Form会报出:FRM-40102:记录必须首先被输入或者删除。也就是上一条记录的状态是有问题的,可是问题在哪呢?

经过多次的测试,不难发现:如果块中已经存在记录,那么使用上面的代码是不会报出错误的,但是如果块中本来是空的,是一个新块,那么使用上面的代码来处理的话,在创建第二条记录的时候将会报出错误。

那么只要处理好第一条记录,就能解决这个问题。采用的方法是在循环中增加一个判断,如果是新记录,这直接进行赋值,而不执行 CREATE_RECORD 语句(虽然执行看上去也不会出错)。

下面给出例子:

[html]
view plaincopyprint?
IF :EVALUATION_LINE.kpi_code IS NULL AND –判断记录是否为空    
  :EVALUATION_LINE.meaning IS NULL THEN     
  :EVALUATION_LINE.kpi_code := kpi_rec.lookup_code;--执行赋值    
  :EVALUATION_LINE.meaning := kpi_rec.meaning;    
ELSE    
  CREATE_RECORD; --否者创建新纪录,赋值    
  :EVALUATION_LINE.kpi_code := kpi_rec.lookup_code;    
  :EVALUATION_LINE.meaning := kpi_rec.meaning;    
END IF;

时间: 2024-10-20 13:10:11

CREATE_RECORD或者NEXT_RECORD导致 FRM-40102 错误:记录必须首先被输入或者删除的相关文章

kerberos 配置错误记录

服务端错误记录: 1.服务端在创建数据库的时候报如下错误: # kdb5_util -s -r HADOOP.HOME 错误提示:kdb5_util: Improper format of Kerberos configuration file while initializing Kerberos code 原因以及解决办法:这是由于/etc/krb5.conf 配置错了或者配置了无效项.检查这个文件. 2.服务端在获取或者显示票据的时候,出现如下错误 klist: Credentials c

Jenkins 错误记录

今天公司把以前的项目全部换成用jenkins发布,服务器这边搭建起来还是比较容易的.但是slaves这边还是比较麻烦,遇到一堆问题: 问题一: 我用的是ssh去链接slaves的,让公司的运维在slaves加入了公钥,安装了jdk后发现服务器和客户端通讯一直报错,开始以为是jdk的版本,位数安装出问题.最后查看了日志: [07/03/14 14:23:16] [SSH] Opening SSH connection to xx.xx.xx.xx:22. [07/03/14 14:23:17] [

Android 笔记之错误记录

前言--好记性不如烂笔头,记录Android学习过程中遇到的各种问题BUG.O(∩_∩)O 错误1 -- Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0 错误原因--一般是int 型数据赋给String ,然后让TextView显示就会出现如上错误. 解决办法--用String.valueOf 或者在int数据后加"" 错误2-- 在布局文件中,文本的设置使用如下写法

javascript将DOM事件处理程序封装为event.js 出现的低级错误记录

将 DOM 0级事件处理程序和DOM2级事件处理程序 IE事件处理程序封装为eventUtil对象,达到跨浏览器的效果.代码如下: var eventUtil = { // 添加事件句柄 addEventHandler:function (element,type,handler) { if (element.addEventListener) { element.addEventListener(type, handler,false); }else if(element.attachEven

开发错误记录8:Unable?to?instantiate?application?com

开发错误记录8:Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication 这是因为在Android Studio2 新的即时运行功能 导致的,因为,这个功能只在更改布局文件时不用重新编译! 把这个功能关闭即可! 在Android 6.0的新增了权限管理机制,所以在调用相应的权限,要重新申请,在6.0以下的版本,不存在,否则在操作相机,联系人,打电话等,会报如下的错误 :(网上有很多封装好

开发错误记录2 .MainActivity (server)&#39; ~ Channel is unrecoverably broken and will be disposed!

刚在调试android程序报 导致直接崩了 Consumer closed input channel or an error occurred.  events=0x9 .MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed! 一直找不到原因,后来在网络上找了各种解决方法都不管用!后来是我的应用开了硬件加硬,导致的! 原因是用webview加截网页来做的应用,当时就对webview进行了优化,

错误记录--更改tomcat端口号方法,Several ports (8005, 8080, 8009)

启动Tomcat服务器报错: Several ports (8005, 8080, 8009) required by Tomcat v5.5 Server at localhost are already in use. The server may already be running in another process, or a system process may be using the port. To start this server you will need to sto

表收集错误导致执行计划错误

有时候,表收集信息错误,导致执行计划错误问题. SQL> insert into test values(1,'user1'); 已创建 1 行. SQL> commit; 提交完成. SQL> select * from test; ID NAME ---------- ---------------------------------------- 1 user1 SQL> insert into test values(2,'user2'); 已创建 1 行. SQL>

[转]错误记录

题目:简单错误记录 题目描述: 开发一个简单的错误记录功能模块,能够记录出错的代码所在的文件名称和行号. 处理: 1.记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条错误,错误计数增加: 2.超过16个字符的文件名称,只记录文件的最后有效16个字符: 3.输入的文件可能带路径,记录文件名称不能带路径 输入描述: 一行或多行字符串.每行包括带路径文件名称,行号,以空格隔开. 文件路径为windows格式 如:E:\V1R2\product\fpgadrive.