【问题标题】:Take value from one form and pass it to another one从一种形式获取价值并将其传递给另一种形式
【发布时间】:2019-07-11 07:33:05
【问题描述】:

我开始学习 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 

我不知道我在哪里做错了?有什么建议或意见吗??

【问题讨论】:

    标签: oracle plsql oracleforms


    【解决方案1】:

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

    • 参数
    • 全局变量

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

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

    全局变量总是字符串(它们的数据类型是VARCHAR2),其大小受到限制(可能取决于表单版本;我知道某些版本有限制最多 255 个字符)。

    parameter 使用起来有点复杂,因为您必须先创建它(在 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 在线帮助系统中的更多信息。

    【讨论】:

    • 谢谢你的简单解释:)
    • 恭喜成为oracleforms 徽章的第一个持有者。
    • 谢谢你,@Barbaros(虽然它还没有被授予:))
    猜你喜欢
    • 2015-06-23
    • 2015-06-06
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    相关资源
    最近更新 更多