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
。它是表格形式的,将包含三个显示项:
- 学生国籍
- 付费
- 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
我有一个 Oracle Forms 项目。 项目是这样的。
我有一个数据库,其中有一个 table,名称为 students_payment
。
表单只有两个块。
名为 date_1
的第一个块包含 from_date 和 to_date
当你把 14-3-2019 这样的日期改成 14-3-2020
然后按回车
第二个块称为 details_1
。它是表格形式的,将包含三个显示项:
- 学生国籍
- 付费
- 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