将所有名称提取到多行块中

时间:2019-01-03 08:25:37

标签: oracle oracleforms

我有一些像这样的表:

tbl1
+---------+
|c_no     |
+---------+
|1        |
+---------+

tbl2
+----------+---------+
|tbl1_c_no |s_name   |
+----------+---------+
|1         |A        |
|1         |D        |
+----------+---------+

我的表单:

enter image description here

◘第一个块的基表用法是tbl1。
◘C_NO字段是使用序列自动生成的。 (必填)。
◘S_GR只是一个未绑定的项目。 (不是必需的)。
nd第二个块的基表用法是tbl2,并且是多行。
◘S_NAME。 (必填)
◘第一个区块就像第二个区块的父代。
◘第一和第二块使用c_no和tbl1_c_no

链接

例如,如果我想添加一些数据,就像这样:

enter image description here

然后按F10键保存:

enter image description here

tbl1 will be:
+---------+
|c_no     |
+---------+
|1        |
|2        |
+---------+

tbl2 will be:
+----------+---------+
|tbl1_c_no |s_name   |
+----------+---------+
|1         |A        |
|1         |D        |
|2         |B        |
|2         |C        |
|2         |E        |
+----------+---------+

我的问题是我想从第3个表中提取s_names到第2个块中。

tbl3
+----------+---------+
|s_gr      |s_name   |
+----------+---------+
|80        |F        |
|85        |G        |
|84        |H        |
|84        |I        |
|80        |J        |
+----------+---------+

赞:

enter image description here

然后,在离开S_GR字段后,它将从tbl3中获取S_GR = 80的S_NAME放入第二个块中

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以创建两个块:

  • 对于第1 个对象,要使该块具有没有基本表,只需触摸Data Blocks节点即可手动创建 用鼠标光标,然后切换创建图标(绿色加号 符号),然后输入名称blk_no。并在画布上添加字段s_no。

  • 对于 2nd ,使用Data Block Wizard,然后选择Table or View type 块的类型。在那里选择表( tbl1 )的两列 (s_noname)作为Database Items

    然后,表单必须调用 默认情况下,自动Layout Wizard(仅选择name列) 并显示为 ,并将s_no保留为。将该块命名为blk_names。这是一个基本表块,而Data Source Name块中的blk_names是表 tbl1

    顺便说一句,将Number of Records Displayed属性设置为10作为示例,然后按照您的问题将字段name转换为snames

    在属性面板上将块的 WHERE子句 (在 数据库 节点中)设置为s_no = :blk_no.s_no 。后 全部,使用内联在KEY-NEXT-ITEM字段上创建一个s_no触发器 代码:

    go_block('blk_names');
    execute_query;
    

在运行时,您可以为1输入一个整数值(以让我们以s_no为例{em> ),然后按{{ 1}}(带有namesenter key的记录将会出现

可能会添加一个带有代码的A触发器按钮:

D

填充并重新填充表 tbl2 (在这种情况下, tbl2 用记录WHEN-BUTTON-PRESSED和{ {1}})。

P.S。禁止显示消息

  

FRM-40352 :检索到的最后一条查询记录

使用代码在表单级别添加一个 go_block('blk_names'); delete tbl2; first_record; while :blk_names.s_no is not null loop insert into tbl2 values(:snames); next_record; end loop; commit; 触发器:

A