Oracle Forms 中的 For 循环

For loop in Oracle Forms

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

我有一个数据库,其中有一个 table,名称为 students_payment。 表单只有两个块。

名为 date_1 的第一个块包含 from_date 和 to_date
当你把 14-3-2019 这样的日期改成 14-3-2020
然后按回车
第二个块称为 details_1。它是表格形式的,将包含三个显示项:

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

它将像这样填充表格

Nationality       USA  

paid        65  

Non_paid    36  

也就是说交了学费的美国学生是65岁,没交学费的是36岁,

我做了所有这些,但问题是我在没有 WHERE 条件的情况下输入我的代码,所以它会带来所有国籍。但它带来的只是美国的第一条记录。

如何将 select 语句放入 FOR 循环中,将第一个国家放在第一条记录中,将第二个国家放在第二条记录中,依此类推所有国籍?

你说的是一套,展示的是另一套,这两者不匹配。

如果第二个块是表格,那么它的布局应该是

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

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

它也将解决您目前遇到的问题; form 布局一次显示一条记录。 表格 布局显示多条记录。

据我了解,这两个块之间没有任何关系。第一个中使用的值用于限制第二个块中返回的行。因此,第二个块必须是数据库块,基于 table(如果你现在有的话,不要让它成为 控制块)。这样做,即使第一个块中没有任何内容,当您位于第二个块中并 执行查询 时,您将获得存储在该 table 中的所有行。表单会自动执行此操作,您无需编写一行代码。

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