Oracle表单中的For循环

问题描述 投票:0回答:1

我有一个Oracle Forms项目。该项目是这样的。

我有一个数据库,该数据库的表名为students_payment。该表格只有两个块。

第一个名为date_1的块包含from_date和to_date当您将日期从14-3-2019到14-3-2020然后按回车第二个块称为details_1。以表格形式显示,将显示三个项目:

  1. 学生国籍
  2. 付费
  3. 非付费

它将像这样填充表格

Nationality       USA  

paid        65  

Non_paid    36  

这意味着,支付了大学学习费用的美国学生为65,而没有支付的学生为36,

我做了所有这一切,但问题是我将代码放在没有国籍的WHERE条件的情况下,因此它将带来所有国籍。但这只是美国的第一张唱片。

我如何在FOR LOOP中放入选择语句,以将第一个国家/地区放在第一条记录中,第二个国家/地区放在第二个记录中,依此类推?

oracle oracle12c oracleforms
1个回答
0
投票

您说的是一件事,显示的是另一件事,而这两个不匹配。

如果第二个块是表格,则其布局应类似于

Nationality    Paid    Non-paid
-----------    ----    --------
USA              65          35
France           70          30

即不是你拥有它的方式;您的布局是form,而不是tabular。我建议您删除该块并从头开始创建它,但是这次要注意向导的要求。

它还将解决您当前遇到的问题; form布局一次显示一个记录。 Tabular布局显示多个记录。

据我了解,这两个块之间没有关系。第一个中使用的值用于限制第二个块中返回的行。因此,第二个块必须是基于表的数据库块(如果您现在拥有的,则不要使其成为control block)。这样做,即使第一个块中什么也没有,但是当您位于第二个块和execute query中时,您将获得该表中存储的所有行。表单会自动执行此操作,您无需编写任何代码。

FOR您提到的循环吗?我认为您应该避免这种情况。在数据库块中,几乎总是错误选择,但可以在控制块中使用。但是,为什么要打扰呢?让Forms做肮脏的工作。

现在返回结果限制:您可以在第二个块上使用PRE-BLOCK触发器,并使用第一个块中的日期项来使用内置的SET_BLOCK_PROPERTY及其ONETIME_WHERE属性,例如

set_block_property('second_block', 
                    onetime_where, 
                   'date_column between :first_block.date_from and :second_block.date_to');

或者,使用第二个块的属性面板并将WHERE子句设置为

where date_column between :first_block.date_from and :second_block.date_to
© www.soinside.com 2019 - 2024. All rights reserved.