Oracle Forms 10g:多记录详情表单如何聚焦指定位置的匹配记录?
在Oracle 10g Forms Developer中定位多记录表单指定记录的实现方案
核心思路
通过传递搜索的TRX编号到详情表单,在详情表单内查找匹配记录并将光标定位至该记录,同时确保记录处于可视显示范围内。
步骤1:传递TRX编号到详情表单
在搜索表单的触发事件(如搜索按钮的WHEN-BUTTON-PRESSED)中,将用户输入的TRX编号存入全局变量,再调用详情表单:
-- 存储搜索的TRX编号到全局变量 :GLOBAL.SEARCHED_TRX := :SEARCH_BLOCK.TRX_NUMBER; -- 调用详情表单,根据实际需求选择CALL_FORM/OPEN_FORM CALL_FORM('DETAIL_FORM.fmx', NO_HIDE, NO_REPLACE, NO_QUERY_ONLY);
步骤2:在详情表单中定位目标记录
在详情表单的WHEN-NEW-FORM-INSTANCE触发事件中,执行定位逻辑:
方案A:遍历已加载记录定位
适用于详情表单预先加载所有记录的场景:
DECLARE v_target_trx VARCHAR2(100) := :GLOBAL.SEARCHED_TRX; BEGIN GO_BLOCK('DETAIL_BLOCK'); FIRST_RECORD; -- 循环查找匹配的TRX编号 WHILE :SYSTEM.LAST_RECORD != 'TRUE' LOOP IF :DETAIL_BLOCK.TRX_NUMBER = v_target_trx THEN EXIT; END IF; NEXT_RECORD; END LOOP; -- 检查最后一条记录是否匹配 IF :DETAIL_BLOCK.TRX_NUMBER != v_target_trx THEN MESSAGE('未找到对应TRX编号的记录'); FIRST_RECORD; END IF; -- 将光标定位到当前记录的指定项 GO_ITEM('DETAIL_BLOCK.TRX_NUMBER'); END;
方案B:带条件查询直接定位
适用于详情表单基于数据库块,可通过条件查询筛选目标记录:
DECLARE v_target_trx VARCHAR2(100) := :GLOBAL.SEARCHED_TRX; BEGIN GO_BLOCK('DETAIL_BLOCK'); -- 设置查询条件 SET_BLOCK_PROPERTY('DETAIL_BLOCK', DEFAULT_WHERE, 'TRX_NUMBER = ''' || v_target_trx || ''''); EXECUTE_QUERY; -- 未找到记录时恢复原查询 IF :SYSTEM.RECORD_STATUS != 'QUERY' THEN MESSAGE('未找到对应TRX编号的记录'); SET_BLOCK_PROPERTY('DETAIL_BLOCK', DEFAULT_WHERE, NULL); EXECUTE_QUERY; END IF; END;
步骤3:确保记录处于可视区域
如果目标记录不在当前显示的10条范围内,调用SCROLL_BLOCK调整滚动:
-- 滚动到当前记录所在页面,确保可见 SCROLL_BLOCK('DETAIL_BLOCK', PAGE, CURRENT_RECORD);
内容的提问来源于stack exchange,提问作者User10120
相关产品推荐
相关产品推荐

