我有一些像这样的表:
tbl1
+---------+
|c_no |
+---------+
|1 |
+---------+
tbl2
+----------+---------+
|tbl1_c_no |s_name |
+----------+---------+
|1 |A |
|1 |D |
+----------+---------+
我的表单:
◘第一个块的基表用法是tbl1。
◘C_NO字段是使用序列自动生成的。 (必填)。
◘S_GR只是一个未绑定的项目。 (不是必需的)。
nd第二个块的基表用法是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个表中提取s_names到第2个块中。
tbl3
+----------+---------+
|s_gr |s_name |
+----------+---------+
|80 |F |
|85 |G |
|84 |H |
|84 |I |
|80 |J |
+----------+---------+
赞:
然后,在离开S_GR字段后,它将从tbl3中获取S_GR = 80的S_NAME放入第二个块中
答案 0 :(得分:2)
您可以创建两个块:
对于第1 个对象,要使该块具有没有基本表,只需触摸Data Blocks
节点即可手动创建
用鼠标光标,然后切换创建图标(绿色加号
符号),然后输入名称blk_no
。并在画布上添加字段s_no。
对于 2nd ,使用Data Block Wizard
,然后选择Table or View type
块的类型。在那里选择表( tbl1 )的两列
(s_no
和name
)作为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}}(带有names
和enter 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