Oracle Forms 中的 For 循环

用户13062112

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

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

调用的第一个块date_1包含 from_date 和 to_date
当您将 14-3-2019 之类的日期
输入到 14-3-2020并按 Enter 时
,第二个块称为details_1它是表格形式,将包含三个显示项:

  1. 学生国籍
  2. 有薪酬的
  3. 非支付

它会像这样填充表格

Nationality       USA  

paid        65  

Non_paid    36  

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

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

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

小脚怪

你说的是一回事,又是另一回事,这两者不匹配。

如果第二个块是表格,则其布局应如下所示

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

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

它还可以解决您目前遇到的问题;表单布局一次显示一条记录。表格布局显示多条记录。

据我了解,这两个块之间没有关系。第一个中使用的值用于限制在第二个块中返回的行。因此,第二个块必须是基于表的数据库块(不要让它成为控制块,如果这是你现在拥有的)。这样做,即使第一个块中没有任何内容,当您定位在第二个块中并执行 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章