我有一个 Oracle Forms 项目。项目是这样进行的。
我有一个数据库,其中有一个名为 的表students_payment
。表单只有两个块。
调用的第一个块date_1
包含 from_date 和 to_date
当您将 14-3-2019 之类的日期
输入到 14-3-2020并按 Enter 时
,第二个块称为details_1
。它是表格形式,将包含三个显示项:
它会像这样填充表格
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] 删除。
我来说两句