从一种形式获取价值并将其传递给另一种形式

时间:2019-07-11 07:33:05

标签: oracle plsql oracleforms

我开始学习PLSQL Oracle,试图找到一种将值从一种形式复制到另一种形式的方法。 我有两种形式,首先是form (A)进行一些计算,在某些情况下,该计算不能在形式(A)中进行编辑。 我想到要制作form (B)并将form (A)的数据传递给它们,然后将其传递回form (A) 这是我的代码和想法的图片。

begin
    set_block_property('POL',UPDATE_ALLOWED,PROPERTY_TRUE);

        update POL set  
        POLICA =: TENDER.POLICA,
        VOZAC = TENDER.VOZAC,
        BR_VOZACA = TENDER.BR_VOZACA,
    NEZGODA1 = TENDER.NEZGODA1,
        PUTNICI = TENDER.PUTNICI,
        BR_PUTNIKA = TENDER.BR_PUTNIKA,
        NEZGODA = TENDER.NEZGODA,
        AO_PLUS_LIMIT = TENDER.AO_PLUS_LIMIT,
        AO_PLUS_PREMIJA = TENDER.AOPLUSPREMIJA,
        PRAVNA_ZASTITA_LIMIT = TENDER.PRAVNA_ZASTITA_LIMIT,
        PRAVNA_ZASTITA_PREMIJA = TENDER.PRAVNA_ZASTITA_PREMIJA,
        LOM_STAKLA_PREMIJA = TENDER.LOM_STAKLA_PREMIJA,
        TROSKOVI_LIJECENJA = TENDER.TROSKOVI_LIJECENJA,
        TROSKOVI_LIJECENJA_PREMIJA = TENDER.TROSKOVI_LIJECENJA_PREMIJA

        WHERE POLICA =:TENDER.BRPOLICE;

end;

我尝试选项:从“项目”属性复制值,但出现错误

FRM-30047: Cannot resolve item reference 

我不知道我在哪里犯了错误?任何建议或评论?

1 个答案:

答案 0 :(得分:2)

表单通常通过以下两种方式进行通信:

  • 参数
  • 全局变量

全局变量更易于使用;在表格A中,您只需将其设置为:global.polica := :pol.polica;,然后在表格B中将其用作(例如)

select ...
from some_table
where polica = :global.polica;

全局变量始终是字符串(其数据类型为VARCHAR2),其大小受到限制(可能取决于Forms版本;我知道某些版本具有限制为255个字符)。

参数的使用有些复杂,因为您必须首先创建它(在Object Navigator的“ Parameters”节点中),但是它允许您选择数据类型(因此不必仅限于字符串)。您可以像设置全局变量的值一样:parameter.polica := :pol.polica;来设置它的值,但是实际上您必须传递以使其在CALL_FORM(或OPEN_FORM)参数列表中形成B。例如:

创建参数列表的函数(将在后面的示例中使用):

function make_param_list (p_name in varchar2)
  return paramlist 
is
  pl_id     paramlist;
  w_button  number;
begin
  pl_id := get_parameter_list(p_name);
  if not id_null(pl_id) then
     destroy_parameter_list(pl_id);
  end if;

  pl_id := create_parameter_list(p_name);

  if id_null(pl_id) then
     message('DESIGN ERROR - PARAMLIST');
     if name_in('system.mode') <> 'QUERY' then
        raise form_trigger_failure;
     end if;
  else
     return pl_id;
  end if;
end;

示例; list_id与我们正在讨论的参数有关:

declare
  list_id ParamList;
begin
  list_id := make_param_list('input_params');

  Add_Parameter(list_id, 'ugo_id'         , TEXT_PARAMETER, :ugo.ugo_id);
  Add_Parameter(list_id, 'query_only_mode', TEXT_PARAMETER, :parameter.query_only_mode);

  call_form('ugoa', no_hide, no_replace, no_query_only, no_share_library_data, list_id);
end;

Forms联机帮助系统中的更多信息。