You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:45:33