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); 

どちらの方法が可能かわからないので、これがどのように実装されているかはあまり気にしません。これは1対1の関係にすぎないため、何らかの隠蔽が機能する可能性があります。

欲しい形

押されたボタンがcname(主キー)の場合、最初の結果テーブルにはもちろん1行しかありませんが、2番目の結果テーブルには選択した主キーに関連付けられたデータが入力されます。他のボタンを押すと、他のテーブルも表示されませんが、最初のテーブルには複数の行が表示される場合があります。結果に表示される列は、チェックボックスによって異なります

4

1 に答える 1

0

表示されたチャンピオンデータを繰り返したくない場合は、2つの別々のデータベースブロックを作成し、それらの間にリレーションを追加します。

すべてのデータを1つの複数行ブロックに表示する場合は、2つのテーブルのデータを結合するビューが必要になります。

検索オプションは非データベースブロックになります。検索ボタンをクリックする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 に答える