在Oracle Form中,如何实现自动编号(行号)的功能

方法一、
只需要将“序号”定义成公式,并将公式设置为:get_block_property('block_name',current_record)就可以实现了,或者把这行语句放到“When-Create-Record”触发器中。
缺点:增改删时,行号不能自动刷新。


方法二、
在block的三个触发器中添加相应的代码:
Key-Crerec:

DECLARE
  LINE NUMBER;
BEGIN
  LINE := :SYSTEM.CURSOR_RECORD;
  LOOP
    IF :SYSTEM.LAST_RECORD = 'TRUE' THEN 
      EXIT; 
    ELSE
      NEXT_RECORD; 
      :blk.ID := :SYSTEM.CURSOR_RECORD + 1; 
    END IF; 
  END LOOP;
  GO_RECORD(LINE);
  CREATE_RECORD;
  :blk.ID := :SYSTEM.CURSOR_RECORD;
END;

Key - Delrec:

DECLARE
  LINE NUMBER;
BEGIN
  DELETE_RECORD;
  LINE := :SYSTEM.CURSOR_RECORD;
  LOOP 
    :blk.ID := :SYSTEM.CURSOR_RECORD; 
    IF :SYSTEM.LAST_RECORD = 'TRUE' THEN 
      EXIT; 
    ELSE 
      NEXT_RECORD; 
    END IF; 
  END LOOP;
  GO_RECORD(LINE);
END;

When - Create - Record:

:blk.ID := :SYSTEM.TRIGGER_RECORD;

缺点:对于记录数很少的table适用,当table中的记录很多时,由于使用了循环操作,所以会影响效率。
为了防止按F11时也生成序号,影响查询,可以在生成前加入以下条件:
IF (:SYSTEM.MODE != ‘ENTER-QUERY’) THEN

posted on 2015-04-20 11:51  小林子的烂笔头  阅读(645)  评论(0编辑  收藏  举报

导航