0

我在哪里可以找到这方面的任何信息。

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(主键),则第一个结果表当然只有一行,而第二个结果表将由与所选主键关联的数据填充。如果按下任何其他按钮,则甚至不会显示另一个表,但是第一个表可能会显示多行。结果中显示的列取决于复选框

4

1 回答 1

0

如果您不想重复显示的冠军数据,请创建两个单独的数据库块,并在它们之间添加关系。

如果要在一个多行块中显示所有数据,则需要一个视图来连接两个表中的数据。

您的搜索选项将是一个非数据库块。当您单击搜索按钮时,您需要更改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);
于 2012-12-03T18:43:47.877 回答