我有一个Oracle Forms项目。该项目是这样的。
我有一个数据库,该数据库的表名为students_payment
。该表格只有两个块。
第一个名为date_1
的块包含from_date和to_date当您将日期从14-3-2019到14-3-2020然后按回车第二个块称为details_1
。以表格形式显示,将显示三个项目:
它将像这样填充表格
Nationality USA
paid 65
Non_paid 36
这意味着,支付了大学学习费用的美国学生为65,而没有支付的学生为36,
我做了所有这一切,但问题是我将代码放在没有国籍的WHERE条件的情况下,因此它将带来所有国籍。但这只是美国的第一张唱片。
我如何在FOR LOOP中放入选择语句,以将第一个国家/地区放在第一条记录中,第二个国家/地区放在第二个记录中,依此类推?
您说的是一件事,显示的是另一件事,而这两个不匹配。
如果第二个块是表格,则其布局应类似于
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