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

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_noname)为 Database Items

    然后,表单必须调用 Layout Wizard 自动作为默认值,其中仅选择 name 列 作为 显示 并将 s_no 隐藏为 。将该块命名为 blk_names。这是一个base-table块,而blk_names块的Data Source Nametabletbl1

    顺便把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 为例 )并填充 namesenter key 字段(带有 AD 的记录将出现

按钮可能会添加 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 填充了记录 AD ).

P.S。抑制消息

FRM-40352: Last Record of Query retrieved

使用以下代码在表单级别添加 ON-MESSAGE 触发器:

if message_code = 40352 then 
    null;
end if;