oracle form11中没Run_Product这个方法吧,你从帮助里查下call_form、new_form、open_formOpenForm 打开新form,原form不关闭,可导航到原form
CallForm 打开新form,原form后台运行,不可导航,关闭后直接导航到原form
NewForm 打开新form,原form关闭,此form关闭后重新打开原form

解决方案 »

  1.   

    找了个示例代码,参考吧
    DECLARE
    V_PATH VARCHAR2(200);
    V_CXMC VARCHAR2(200);
    V_ZGBH VARCHAR2(200);
    PL_ID ParamList;
    BEGIN

    V_PATH:='D:\SOFT\'; --程序在上的存放位置
    V_CXMC:='TEST';--程序的文件名,不带文件后缀
    V_ZGBH:='测试';--传入的职工编号

      pl_id :=get_parameter_list('mypl');
    if not Id_null(pl_id) then
    destroy_parameter_list(pl_id);
    end if;
    pl_id:=create_parameter_list('mypl');
    add_parameter(pl_id,'P_ZGBH',text_parameter,V_ZGBH);

    call_form(V_PATH||V_CXMC,hide,Do_replace,no_query_only,pl_id);
    /*CallForm参数含义:
    1、程序名称(含路径)
    2、原form是否隐藏 取值:HIDE、NO_HIDE
    3、被调用form是否使用和原form一样的菜单 取值:NO_REPLACE、DO_REPLACE
    4、查询模式 控制用户是否仅能进行查询 取值:NO_QUERY_ONLY、QUERY_ONLY
    5、参数列表
    注:一般情况只需要修改第一个和第五个参数,其他固定不变
    */
    END;
      

  2.   

    您好:
    謝謝您,
    目前 第一個FORM ( employeeA.fmb) 可以過了
    但第2個FORM ( empdepnA.fmb )中
       我先 新增1個參數EMPLOYEESSN。
       再新增一個 TRIGGER=WHEN-NEW-FORM-INSTANCE
           內容
           
    DECLARE
    -- Declare a forms block identifier
    blk_id Block;
    BEGIN
      -- Obtain the block ID of the EMPLOYEE block.  This is the
      -- Master block in the empdepn master/detail form.
      blk_id := Find_Block('EMPLOYEE');
      IF NOT Id_Null(blk_id) THEN
        -- Check to make sure our parameter has a value. If this form
        -- were executed by itself, then the parameter will be null.
        -- If this form is called from EMPLOYEE then the parameter will
        -- be passed along and assigned to: PARAMETER.employeessn
        IF (:PARAMETER.employeessn is not null) THEN
            -- Since we have a parameter, use it to alter the WHERE Clause
            -- property so that it becomes WHERE ssn=:PARAMETER.employeessn
            SET_BLOCK_PROPERTY(blk_id,DEFAULT_WHERE,'ssn=' || : PARAMETER.employeessn);
            -- Navigate to the EMPLOYEE block and execute a query automatically
            GO_BLOCK('EMPLOYEE');
            EXECUTE_QUERY;
        END IF;
      END IF;
          但編譯時卻出現 以下圖片錯誤:
    我試著先將
               SET_BLOCK_PROPERTY(blk_id,DEFAULT_WHERE,'ssn=' || : PARAMETER.employeessn);
      改為 SET_BLOCK_PROPERTY(blk_id,DEFAULT_WHERE,'ssn=' || 333445555);
    他是可以編譯過,但 實際RUN時,
    第1個FORM 的SSN=596789011 但  跳到 第2個FORM 時,卻仍抓出 EMPLOYEE的第1筆資料123456789 的紀錄值。請問,這又該如何處理呢?
    謝謝!
      

  3.   

    您好:
    請問 3# 代碼? 是指  本帖第3篇嗎?
    您的範例      call_form(V_PATH||V_CXMC,hide,Do_replace,no_query_only,pl_id);
    我實際使用  call_form('C:\test\fs\empdepnA',hide,Do_replace,no_query_only,pl_id);
     應該是一樣的。我有試著 用除錯,但不知道該如何 看到 該:PARAMETER.employeessn  是否 有傳值?
      

  4.   

    pl_id :=get_parameter_list('mypl');
        if not Id_null(pl_id) then
            destroy_parameter_list(pl_id);
        end if;
        pl_id:=create_parameter_list('mypl');
        add_parameter(pl_id,'P_ZGBH',text_parameter,V_ZGBH);这段按你的需求该,范例中传递的参数名为P_ZGBH
      

  5.   

    您好:我 這邊是用
    Add_Parameter(pl_id, 'EMPLOYEESSN', TEXT_PARAMETER, :SSN);
    參數名稱 'EMPLOYEESSN'
    參數值    :SSN所以 相對應到  另一個FORM 中
    設定一個  同名參數 EMPLOYEESSN ,(順便請教  : 
       一定要設地同名嗎?
      設定同名後,就會自動MAPPING嗎?
     )。謝謝!
      

  6.   

    我有試著在 第2個FORM 的 先加入1個欄位(XSSN) ,來測試 是否可以抓到 PARAMETER.employeessn        :XSSN := :PARAMETER.employeessn;
            SET_BLOCK_PROPERTY(blk_id,DEFAULT_WHERE,'ssn=999887777');XSSMN可以顯示 PARAMETER.employeessn
    但        SET_BLOCK_PROPERTY(blk_id,DEFAULT_WHERE,'ssn=999887777');
    這一段 卻 沒有實際 抓出 對應的資料!
      

  7.   

    取项的值时尽量不要直接使用:项名 的方式
    写全,写成:块名.项名 形式
    如果存在相同项名的情况,form默认会取前面那个块中此项的值
      

  8.   

    不好意思,取项的值时尽量不要直接使用  ,所謂項 ,是指? 欄位 嗎?
    比如 EMPLOYEE 這個TABLE  (其中 有ID,SSN,NAME)
    我同名 取為 EMPLOYEE   BLOCK (同樣有 ID,SSN,NAME),則我要用 EMPLOYEE.SSN 來抓值?如果存在相同项名的情况,form默认会取前面那个块中此项的值??
    是指 同一個FORM 中,前面的 BLOCK 嗎?另外,目前似乎 是
      blk_id := Find_Block('EMPLOYEE');
     SET_BLOCK_PROPERTY(blk_id,DEFAULT_WHERE,'ssn=999887777');
    這一個  無法讓 這一個FORM 中的 BLOCK 設定值。
      

  9.   

    直接使用名称设置block属性就行
    SET_BLOCK_PROPERTY('EMPLOYEE',DEFAULT_WHERE,'ssn=999887777');
      

  10.   

    您好:
    我有試過您的 語法,直接用EMPLOYEE,但他就是 整個呈現空白網頁以下為 2個範例檔
    用 employeeA.fmb  去CALL empdepnA.fmb
      

  11.   

    您好:
    不好意思, 我最後打掉,才重做;然後 編譯SQL/PS 及 模組編譯
    這樣,又突然可以用了。
    另外,還有我自訂的   :XSSN := :PARAMETER.employeessn; 要拿到   EXECUTE_QUERY;  之後,才可。(不然結果會空白)
    WHY?另外,請問 使用 除錯模組時,要如何 看到 參數值?
    一定要 自訂一個欄位,來給他值嗎? 還是有辦法 在除錯時, 游標移到該處,就可以看到 參數值 或 某個偵錯點的相關值?謝謝!