在Oracle Forms 10g中使用LOV值筛选数据块
我需要从名为“PRODUCTS”的数据块中实现一个简单的产品表单 产品通过“公司\合作伙伴\ ID”字段与“合作伙伴”相关 此字段将由一个LOV表示,用于选择我们希望为其可视化您的产品的合作伙伴 如果当前未选择合作伙伴,则应显示您的所有产品。当选择合作伙伴时,只应显示其产品 表单将如下所示: 搜索字段右侧的按钮应显示LOV并启动查询。按下按钮时,我尝试了以下代码作为“智能触发器”。但它根本不起作用。LOV列表显示两次,当未选择任何合作伙伴时,不会显示任何产品 有人能帮我实现这个功能吗?谢谢一旦您进入查询模式(这就是在Oracle Forms 10g中使用LOV值筛选数据块,oracle,oracleforms,lov,Oracle,Oracleforms,Lov,我需要从名为“PRODUCTS”的数据块中实现一个简单的产品表单 产品通过“公司\合作伙伴\ ID”字段与“合作伙伴”相关 此字段将由一个LOV表示,用于选择我们希望为其可视化您的产品的合作伙伴 如果当前未选择合作伙伴,则应显示您的所有产品。当选择合作伙伴时,只应显示其产品 表单将如下所示: 搜索字段右侧的按钮应显示LOV并启动查询。按下按钮时,我尝试了以下代码作为“智能触发器”。但它根本不起作用。LOV列表显示两次,当未选择任何合作伙伴时,不会显示任何产品 有人能帮我实现这个功能吗?谢谢一
enter\u query
所做的),进一步的处理将停止,直到您执行查询为止
我认为您正确地创建了LoV——最常用的方法是首先创建一个记录组查询,然后基于它创建一个LoV
因此,我想在WHEN-NEW-FORM-INSTANCE
触发器中输入\u QUERY
,让您当前的按钮显示LoV,并让用户在“公司合作伙伴ID”项中选择一个值。执行查询(通过按下相应的工具栏按钮、快捷键(F8?)或新的“执行查询”按钮)将实际执行查询。如果正确创建了主-详细关系(使用数据块向导是最简单的选项),那么您将在“产品”块中获得行。一旦进入查询模式(这是enter\u query
所做的),进一步的处理将停止,直到您执行查询为止
我认为您正确地创建了LoV——最常用的方法是首先创建一个记录组查询,然后基于它创建一个LoV
因此,我想
在WHEN-NEW-FORM-INSTANCE
触发器中输入\u QUERY
,让您当前的按钮显示LoV,并让用户在“公司合作伙伴ID”项中选择一个值。执行查询(通过按下相应的工具栏按钮、快捷键(F8?)或新的“执行查询”按钮)将实际执行查询。如果正确创建了主-详细关系(使用数据块向导是最简单的选项),那么您将在“产品”块中获得行。在“产品”块的WHERE子句”属性中输入一个值
其中条款属性:
COMPANIES_PARTNERS_ID LIKE NVL(:lov_block.COMPANIES_PARTNERS_ID, '%')
在PRODUCTS块WHERE子句的属性中放置一个值 其中条款属性:
COMPANIES_PARTNERS_ID LIKE NVL(:lov_block.COMPANIES_PARTNERS_ID, '%')
- 您不需要使用
命令ENTER\u QUERY
- 最好使用
针对DEFAULT\u,其中
。如果按companys\u PARTNERS\u ID设置
未选择任何LOV行,或按CANCEL
符号取消LOV行,则将列出所有产品(在本例中,您将看到第一个ID,很可能带有值X
,因为1
不位于公司\u合作伙伴\u ID
块,而是位于同一块,即控件
,以及其他项目。当您通过向下箭头向下移动时,当光标位于产品
字段,似乎该字段显示的项目数设置为公司时,您将看到其他
值_PARTNERS_IDID
,因为1
块已设置为产品
显示项目)10
触发器中使用以下代码:
DECLARE
V_WHERE VARCHAR2(500);
BEGIN
GO_ITEM('COMPANIES_PARTNERS_ID');
IF SHOW_LOV('COMPANIES_LOV') THEN
V_WHERE:='COMPANIES_PARTNERS_ID='||:COMPANIES_PARTNERS_ID;
ELSE
V_WHERE:='1=1';
END IF;
SET_BLOCK_PROPERTY('PRODUCTS',DEFAULT_WHERE,V_WHERE);
CLEAR_BLOCK(NO_VALIDATE);
EXECUTE_QUERY;
END;
- 您不需要使用
ENTER\u QUERY
命令
- 最好使用
DEFAULT\u,其中
针对companys\u PARTNERS\u ID
设置。如果未按CANCEL
选择LOV的任何行,或按X
符号取消LOV,则将列出所有产品(在本例中,您将看到第一个ID,很可能带有值1
,因为公司\u合作伙伴\u ID
不位于控件
块,而是位于同一块,即产品
,以及其他项目。当您通过向下箭头向下移动时,当光标位于公司时,您将看到其他ID
值_PARTNERS_ID
字段,似乎该字段显示的项目数设置为1
,因为产品
块已设置为10
显示项目)
因此,按下按钮时,您可以在触发器中使用以下代码:
DECLARE
V_WHERE VARCHAR2(500);
BEGIN
GO_ITEM('COMPANIES_PARTNERS_ID');
IF SHOW_LOV('COMPANIES_LOV') THEN
V_WHERE:='COMPANIES_PARTNERS_ID='||:COMPANIES_PARTNERS_ID;
ELSE
V_WHERE:='1=1';
END IF;
SET_BLOCK_PROPERTY('PRODUCTS',DEFAULT_WHERE,V_WHERE);
CLEAR_BLOCK(NO_VALIDATE);
EXECUTE_QUERY;
END;
非常感谢你的回答。这个解决方案很好。@Abdullahbahatab你不受欢迎,兄弟。你可以尝试向上投票。非常感谢你的回答。这个解决方案很好。@Abdullahbahatab你不受欢迎,兄弟。你可以尝试向上投票。