使用复选框在父表中搜索 (Oracle Forms Builder)
Posted
技术标签:
【中文标题】使用复选框在父表中搜索 (Oracle Forms Builder)【英文标题】:Searching in the parent table with checkboxes (Oracle Forms Builder) 【发布时间】:2012-11-30 20:30:03 【问题描述】:我在哪里可以找到这方面的任何信息。
a)我需要选择要搜索的列
b)用复选框选择要显示的数据
c)如果所选列(您在其中搜索)是主键列,则表单还将显示子表复选框,如果选中,则将显示列以及选中的父表列。
表格:
CREATE TABLE CHAMPIONS (
CNAME VARCHAR2(15) NOT NULL,
PRICELEVEL NUMBER(1) NOT NULL,
ROLE VARCHAR2(10) NOT NULL,
HPLEVEL NUMBER(2) NOT NULL,
ATKLEVEL NUMBER(2) NOT NULL,
MAGICLEVEL NUMBER(2) NOT NULL,
DIFFLEVEL NUMBER(2) NOT NULL
);
CREATE TABLE SKINS (
SNAME VARCHAR2(20) NOT NULL,
CNAME VARCHAR2(15) NOT NULL,
PRICELEVEL NUMBER(1) NOT NULL);
ALTER TABLE Champions ADD CONSTRAINT pk_Champions PRIMARY KEY (CNAME);
ALTER TABLE Skins ADD CONSTRAINT fk_Skins FOREIGN KEY (CNAME) REFERENCES champions(CNAME);
我并不关心这是如何实现的,因为我不知道哪种方式可行。由于这只是一对一的关系,因此某种隐藏可能会起作用。
如果按下的按钮是 cname(主键),第一个结果表当然只有一行,而第二个结果表将由与所选主键关联的数据填充。如果按下任何其他按钮,则甚至不会显示另一个表,但是第一个表可能会显示多行。结果中显示的列取决于复选框
【问题讨论】:
您想动态创建带有给定表的列(列名?)的复选框? 用更多信息更新了问题 我仍然不清楚你想做什么视图。皮肤只为一个英雄而存在? 添加了我想要的外观。如果表单构建器不具备此功能,则不必精确 有23个不同的冠军。它们中的每一个都可以在子表中拥有 0 到 x 个皮肤。因此,如果您使用“AHRI”在 cname 列中搜索,您会从父表中获得有关她的信息,并获得她所有皮肤和皮肤价格级别的列表 【参考方案1】:如果您不想重复显示的冠军数据,请创建两个单独的数据库块,并在它们之间添加关系。
如果您想在一个多行块中显示所有数据,您将需要一个将两个表中的数据连接起来的视图。
您的搜索选项将是一个非数据库块。单击搜索按钮时,您需要更改块的default_where
,添加根据字段搜索的值。为此,您需要添加触发器pre-query
。比如:
搜索按钮的触发器
begin
go_block('champions_block');
execute_query; -- this triggers pre-query of champions_block
end;
触发预查询
if :search.search_text is not null then
-- this changes the where of your block
set_block_property('champions_block',default_where, 'cname like %'||:search.search_text||'%');
--
else
-- remove previous where
set_block_property('champions_block',default_where, '');
end if;
字段的显示/隐藏更复杂,您需要使用以下方式显示/隐藏项目:
set_item_property('name_of_block.name_of_item', visible, property_true); -- false to hide
并且还需要调整其他字段的位置:
set_item_property('name_of_block.name_of_item', position, pos_x, pos_y);
【讨论】:
以上是关于使用复选框在父表中搜索 (Oracle Forms Builder)的主要内容,如果未能解决你的问题,请参考以下文章