将所有名称提取到多行块中
Fetch all names into multi row block
我有 table 看起来像这样的:
tbl1
+---------+
|c_no |
+---------+
|1 |
+---------+
tbl2
+----------+---------+
|tbl1_c_no |s_name |
+----------+---------+
|1 |A |
|1 |D |
+----------+---------+
我的表格:
◘ 第一个区块的基础 table 用法是 tbl1.
◘ C_NO 字段是使用序列自动生成的。 (必填)。
◘ S_GR 只是一个未绑定的项目。 (不需要)。
◘ 第二块的基础 table 用法是 tbl2 并且是多行。
◘ S_NAME。 (必填)
◘ 第一个区块就像第二个区块的父区块。
◘ 第一块和第二块使用 c_no 和 tbl1_c_no
链接
比如我想添加一些数据,是这样的:
然后按F10保存:
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 个 table 获取 s_names 到第 2 个块。
tbl3
+----------+---------+
|s_gr |s_name |
+----------+---------+
|80 |F |
|85 |G |
|84 |H |
|84 |I |
|80 |J |
+----------+---------+
像这样:
然后在离开 S_GR 字段后,它将从 tbl3 中获取 S_NAME S_GR = 80 到第二个块
您可以创建两个块:
对于第一个,要有一个没有基础table的块,手动创建只需触摸 Data Blocks
节点
使用鼠标光标,然后切换创建图标(绿色加号
sign ) 并键入名称 blk_no
。并在 canvas 上添加字段 s_no。
对于第二一个使用Data Block Wizard
并选择Table or View type
对于块的类型。 select table(tbl1) 的两列
(s_no
和 name
)为 Database Items
。
然后,表单必须调用
Layout Wizard
自动作为默认值,其中仅选择 name
列
作为 显示 并将 s_no
隐藏为 。将该块命名为 blk_names
。这是一个base-table块,而blk_names
块的Data Source Name
是tabletbl1。
顺便把Number of Records Displayed
属性设置成10
作为例子,将字段名name
转换成snames
如你的问题。
设置块的WHERE子句(在数据库 节点)作为 s_no = :blk_no.s_no
在 属性 调色板。后
全部,使用内联在 s_no
字段上创建一个 KEY-NEXT-ITEM
触发器
代码:
go_block('blk_names');
execute_query;
在运行时,您可以为 s_no
输入一个整数值(让我们以 1
为例 )并填充 names
按 enter key
字段(带有 A
和 D
的记录将出现 )
按钮可能会添加 WHEN-BUTTON-PRESSED
代码为 :
的触发器
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;
填充并重新填充 table tbl2(在本例中为 tbl2 填充了记录 A
和 D
).
P.S。抑制消息
FRM-40352: Last Record of Query retrieved
使用以下代码在表单级别添加 ON-MESSAGE
触发器:
if message_code = 40352 then
null;
end if;
我有 table 看起来像这样的:
tbl1
+---------+
|c_no |
+---------+
|1 |
+---------+
tbl2
+----------+---------+
|tbl1_c_no |s_name |
+----------+---------+
|1 |A |
|1 |D |
+----------+---------+
我的表格:
◘ 第一个区块的基础 table 用法是 tbl1.
◘ C_NO 字段是使用序列自动生成的。 (必填)。
◘ S_GR 只是一个未绑定的项目。 (不需要)。
◘ 第二块的基础 table 用法是 tbl2 并且是多行。
◘ S_NAME。 (必填)
◘ 第一个区块就像第二个区块的父区块。
◘ 第一块和第二块使用 c_no 和 tbl1_c_no
比如我想添加一些数据,是这样的:
然后按F10保存:
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 个 table 获取 s_names 到第 2 个块。
tbl3
+----------+---------+
|s_gr |s_name |
+----------+---------+
|80 |F |
|85 |G |
|84 |H |
|84 |I |
|80 |J |
+----------+---------+
像这样:
然后在离开 S_GR 字段后,它将从 tbl3 中获取 S_NAME S_GR = 80 到第二个块
您可以创建两个块:
对于第一个,要有一个没有基础table的块,手动创建只需触摸
Data Blocks
节点 使用鼠标光标,然后切换创建图标(绿色加号 sign ) 并键入名称blk_no
。并在 canvas 上添加字段 s_no。对于第二一个使用
Data Block Wizard
并选择Table or View type
对于块的类型。 select table(tbl1) 的两列 (s_no
和name
)为Database Items
。然后,表单必须调用
Layout Wizard
自动作为默认值,其中仅选择name
列 作为 显示 并将s_no
隐藏为 。将该块命名为blk_names
。这是一个base-table块,而blk_names
块的Data Source Name
是tabletbl1。顺便把
Number of Records Displayed
属性设置成10
作为例子,将字段名name
转换成snames
如你的问题。设置块的WHERE子句(在数据库 节点)作为
s_no = :blk_no.s_no
在 属性 调色板。后 全部,使用内联在s_no
字段上创建一个KEY-NEXT-ITEM
触发器 代码:go_block('blk_names'); execute_query;
在运行时,您可以为 s_no
输入一个整数值(让我们以 1
为例 )并填充 names
按 enter key
字段(带有 A
和 D
的记录将出现 )
按钮可能会添加 WHEN-BUTTON-PRESSED
代码为 :
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;
填充并重新填充 table tbl2(在本例中为 tbl2 填充了记录 A
和 D
).
P.S。抑制消息
FRM-40352: Last Record of Query retrieved
使用以下代码在表单级别添加 ON-MESSAGE
触发器:
if message_code = 40352 then
null;
end if;