oracle form11中没Run_Product这个方法吧,你从帮助里查下call_form、new_form、open_formOpenForm 打开新form,原form不关闭,可导航到原form
CallForm 打开新form,原form后台运行,不可导航,关闭后直接导航到原form
NewForm 打开新form,原form关闭,此form关闭后重新打开原form
CallForm 打开新form,原form后台运行,不可导航,关闭后直接导航到原form
NewForm 打开新form,原form关闭,此form关闭后重新打开原form
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;
謝謝您,
目前 第一個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篇嗎?
您的範例 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 是否 有傳值?
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
Add_Parameter(pl_id, 'EMPLOYEESSN', TEXT_PARAMETER, :SSN);
參數名稱 'EMPLOYEESSN'
參數值 :SSN所以 相對應到 另一個FORM 中
設定一個 同名參數 EMPLOYEESSN ,(順便請教 :
一定要設地同名嗎?
設定同名後,就會自動MAPPING嗎?
)。謝謝!
SET_BLOCK_PROPERTY(blk_id,DEFAULT_WHERE,'ssn=999887777');XSSMN可以顯示 PARAMETER.employeessn
但 SET_BLOCK_PROPERTY(blk_id,DEFAULT_WHERE,'ssn=999887777');
這一段 卻 沒有實際 抓出 對應的資料!
写全,写成:块名.项名 形式
如果存在相同项名的情况,form默认会取前面那个块中此项的值
比如 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 設定值。
SET_BLOCK_PROPERTY('EMPLOYEE',DEFAULT_WHERE,'ssn=999887777');
我有試過您的 語法,直接用EMPLOYEE,但他就是 整個呈現空白網頁以下為 2個範例檔
用 employeeA.fmb 去CALL empdepnA.fmb
不好意思, 我最後打掉,才重做;然後 編譯SQL/PS 及 模組編譯
這樣,又突然可以用了。
另外,還有我自訂的 :XSSN := :PARAMETER.employeessn; 要拿到 EXECUTE_QUERY; 之後,才可。(不然結果會空白)
WHY?另外,請問 使用 除錯模組時,要如何 看到 參數值?
一定要 自訂一個欄位,來給他值嗎? 還是有辦法 在除錯時, 游標移到該處,就可以看到 參數值 或 某個偵錯點的相關值?謝謝!