【问题标题】:Inserting Record in oracle forms在 oracle 表单中插入记录
【发布时间】:2012-10-18 16:44:49
【问题描述】:

我正在使用 Oracle Forms Builder,我有一个包含多条记录的块。代码看起来有点像这样

first_record;
IF NAME_IN('SYSTEM.LAST_RECORD') != 'TRUE' THEN                                 
  LOOP                  
    IF name_in('QOTLNDET_LINES.SERIAL_NUMBER') IS NOT NULL THEN                         
      QOTLNDET_LINES_REMOVE.Delete_Row;
      clear_record;     
    ELSE                    
      next_record;
    END IF;
    EXIT WHEN NAME_IN('SYSTEM.LAST_RECORD') = 'TRUE';

  END LOOP;
  execute_query;
  COMMIT;
  go_block('QOTHDDET_MAIN');
END IF; 

就在 next_record 之前,在 ELSE 段内,我需要删除当前记录并重新插入它。问题不是删除记录,而是重新插入它。有任何想法吗?提前致谢。

【问题讨论】:

  • 你为什么要做这个奇怪的事情而不是仅仅做一个更新?
  • 我不确定更新是否会更新依赖字段...但是如果更新会更新,那么请告诉我如何进行更新:P

标签: sql oracle plsql oracleforms


【解决方案1】:

我同意 APC,而不是重新插入记录,这意味着删除然后再次插入,更简单的方法是只更新 DB(或非 DB)块中的字段。有点像-

Go_Block('Block_B1');
Last_Record;
L_num_records := :system.cursor_record;
FOR i in 1..L_num_records
LOOP    
     Go_Block('Block_B1');
     Go_Record(i);
     --update the fields in the row
     :Block_B1.item1 := 'Set your value';
     :Block_B1.item2 := 'Set your value';
     ...
     ...
     Next_Record;
END LOOP;
First_Record;

【讨论】:

  • 块是 QOTLNDET_LINES,项目是 INVENTORY_ITEM... 我正在这样做::QOTLNDET_LINES.INVENTORY_ITEM = 'abc' 但我一直收到错误消息。
  • @Nacho321:您现在可以做的最重要的事情就是阅读错误消息。或者你想让我们猜测你遇到了什么错误?那可能很有趣……
【解决方案2】:

我同意 APC 和 Annjawn 的观点,即更新似乎是正确的方法。查看您的代码时,您的代码似乎在 pll 库中。当您使用 name_in() 而不是直接引用该项目时。如果这是真的,那么意味着您在将值分配给项目时自然不能使用直接引用。相反,您必须使用 copy()。自从我使用 name_in() 和 copy() 已经有一段时间了,但是这样的东西应该可以工作:

IF NAME_IN('SYSTEM.LAST_RECORD') != 'TRUE' THEN                                 
  LOOP                  
    IF name_in('QOTLNDET_LINES.SERIAL_NUMBER') IS NOT NULL THEN                         
      QOTLNDET_LINES_REMOVE.Delete_Row;
      clear_record;     
    ELSE        
      Copy('new value', 'QOTLNDET_LINES.INVENTORY_ITEM');

      next_record;
    END IF;
    EXIT WHEN NAME_IN('SYSTEM.LAST_RECORD') = 'TRUE';

  END LOOP;
  execute_query;
  COMMIT;
  go_block('QOTHDDET_MAIN');
END IF; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多