成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Oracle Form Builder中使用樹的心得

瀏覽:282日期:2023-11-22 09:26:08
一、樹的簡(jiǎn)介Developer 6.0以上版本提供了hierarchy tree(層次樹)的概念,htree控件非常方便,只需要少量的編程即可實(shí)現(xiàn)顯示層次結(jié)構(gòu)的目的。樹的特有屬性中如下幾個(gè)較為重要: l 多項(xiàng)選擇(Multi-Selection):是否答應(yīng)一次選中樹的多個(gè)節(jié)點(diǎn)。假如不答應(yīng),那么;;;選中第二個(gè)節(jié)點(diǎn)時(shí),第一個(gè)被選中的節(jié)點(diǎn)會(huì)取消選擇。l 記錄組(Record Group):指定生成樹的記錄組的名字。簡(jiǎn)單介紹一下跟樹相關(guān)的觸發(fā)子(Built-in):l FUNCTION GET_TREE_NODE_PROPERTY (item_name VARCHAR2, node NODE,property NUMBER);功能:取得樹節(jié)點(diǎn)的屬性其中property有如下幾種:NODE_STATE:EXPANDED_NODE(擴(kuò)展節(jié)點(diǎn))COLLAPSED_NODE(收縮節(jié)點(diǎn))LEAF_NODE(葉節(jié)點(diǎn))--注:不能展開或收縮NODE_DEPTH:既節(jié)點(diǎn)在樹中的層級(jí)。NODE_LABEL:節(jié)點(diǎn)的顯示文本NODE_ICON:節(jié)點(diǎn)的圖標(biāo)NODE_VALUE:節(jié)點(diǎn)的值。例子:DECLARE htree ITEM; node_value;VARCHAR2(100);BEGIN -- 得到樹 htree := Find_Item('tree_block.htree3'); -- 得到當(dāng)前選中節(jié)點(diǎn)的值 node_value := Ftree.Get_Tree_Node_Property(htree, :SYSTEM.TRIGGER_NODE, Ftree.NODE_VALUE); ;...END;注釋:其中: SYSTEM.TRIGGER_NODE指當(dāng)前選中的樹節(jié)點(diǎn)。l FUNCTION GET_TREE_PROPERTY (item_name VARCHAR2,property NUMBER);功能:取得樹的屬性其中property有如下幾種:DATASOURCERECORD_GROUPQUERY_TEXTNODE_COUNT:返回樹中節(jié)點(diǎn)的個(gè)數(shù)。SELECTION_COUNTALLOW_EMPTY_BRANCHESALLOW_MULTI-SELECTl PROCEDURE SET_TREE_NODE_PROPERTY (item_name VARCHAR2,node FTREE.NODE,property NUMBER,value VARCHAR2);功能:設(shè)置樹節(jié)點(diǎn)的屬性l PROCEDURE SET_TREE_PROPERTY (item_name VARCHAR2,property NUMBER, value VARCHAR2); PROCEDURE SET_TREE_PROPERTY (item_name VARCHAR2,property NUMBER, value RECORDGROUP);功能:設(shè)置樹的屬性l PROCEDURE POPULATE_TREE (item_name VARCHAR2);功能:清空樹中已有數(shù)據(jù),并根據(jù)記錄組或數(shù)據(jù)查詢重新生成樹。l PROCEDURE ADD_TREE_DATA (item_name VARCHAR2,node FTREE.NODE, offset_type NUMBER,offset NUMBER,data_source NUMBER,data VARCHAR2);功能:在指定節(jié)點(diǎn)下添加樹中數(shù)據(jù)注:使用比較麻煩。 l FUNCTION FIND_TREE_NODE(item_name VARCHAR2,earch_string VARCHAR2,search_type NUMBER,search_by NUMBER,search_root NODE,start_point NODE);功能:找到顯示文本或值符合search_string的節(jié)點(diǎn)。參數(shù):search_type:FIND_NEXT FIND_NEXT_CHILDSearch_by:NODE_LABEL NODE_VALUESearch_root:查詢的根節(jié)點(diǎn),一般是Ftree.ROOT_NODEStart_point:查找的開始節(jié)點(diǎn),一般是Ftree.ROOT_NODEl FUNCTION ADD_TREE_NODE(item_name VARCHAR2,node FTREE.NODE,offset_type NUMBER,offset NUMBER,state NUMBER,label VARCHAR2, icon VARCHAR2,value VARCHAR2);功能:添加樹節(jié)點(diǎn)。Offset_type:指定節(jié)點(diǎn)的分支類型,PARENT_OFFSET和SIBLING_OFFSETOffset:指定新節(jié)點(diǎn)的位置,PARENT_OFFSET:1..N ;;;;;;;LAST_CHILDSIBLING_OFFSET:NEXT_NODE ;;;;;;;PREVIOUS_NODEState:EXPANDED_NODE(擴(kuò)展節(jié)點(diǎn))COLLAPSED_NODE(收縮節(jié)點(diǎn))LEAF_NODE(葉節(jié)點(diǎn))l PROCEDURE DELETE_TREE_NODE(item_name VARCHAR2,node NODE);功能:刪除樹節(jié)點(diǎn)l FUNCTION GET_TREE_NODE_PARENT(item_name VARCHAR2,node NODE);功能:得到指定節(jié)點(diǎn)的父節(jié)點(diǎn)。l FUNCTION GET_TREE_SELECTION(item_name VARCHAR2,selection NUMBER);功能:得到處于選中狀態(tài)的節(jié)點(diǎn)。l PROCEDURE SET_TREE_SELECTION(item_name VARCHAR2,node NODE, selection_type NUMBER);功能:指定單個(gè)節(jié)點(diǎn)的選中狀態(tài)參數(shù):selection_type:SELECT_ON SELECT_OFF SELECT_TOGGLEFORM運(yùn)行態(tài)時(shí)有關(guān)的觸發(fā)器:l When-Tree-Node-Activated:用戶雙擊節(jié)點(diǎn)或在節(jié)點(diǎn)選中時(shí)按[ENTER]鍵時(shí)觸發(fā)。l When-Tree-Node-Expanded:節(jié)點(diǎn)展開或收縮時(shí)觸發(fā)l When-Tree-Node-Selected:當(dāng)節(jié)點(diǎn)選中或取消選擇時(shí)觸發(fā)二、生成樹的方式樹控件一般單獨(dú)放在一個(gè)控制塊中(注:不能放在數(shù)據(jù)塊中),在畫布(CANVAS)上放置樹很輕易,并且,如無(wú)必要,樹的屬性也不需要設(shè)置。生成樹的方式有幾種:l 運(yùn)行前通過設(shè)置記錄組或數(shù)據(jù)查詢屬性來生成l 通過ADD_TREE_DATA觸發(fā)子來實(shí)現(xiàn)l 運(yùn)行態(tài),通過ADD_TREE_NODE等觸發(fā)子來實(shí)現(xiàn)l 運(yùn)行態(tài),通過添加或刪除記錄組的數(shù)據(jù)元素來實(shí)現(xiàn)分析:一、 對(duì)樹直接操作描述:Find_Tree_Node找到指定節(jié)點(diǎn),Add_Tree_Node來添加其下級(jí)節(jié)點(diǎn)。 缺點(diǎn):編程較為復(fù)雜,操作不靈活,而且易出錯(cuò)。優(yōu)點(diǎn):可以對(duì)添加節(jié)點(diǎn)等過程進(jìn)行控制,實(shí)現(xiàn)一些非凡要求。例子: --dept_cur為取單位的CURSOR,emp_cur為取雇員的CURSOR htree := Find_Item('tree_view.tree_emp'); open dept_cur; loop fetch dept_cur into aa; exit when dept_cur%notfound; del_node := Ftree.Find_Tree_Node ( htree,aa.kjmc, Ftree.FIND_NEXT, Ftree.NODE_LABEL, Ftree.ROOT_NODE, Ftree.ROOT_NODE); -- 刪除單位節(jié)點(diǎn)及其子節(jié)點(diǎn) IF NOT Ftree.ID_NULL(del_node) then Ftree.Delete_Tree_Node(htree, del_node); END IF; end loop; close dept_cur; -- 根據(jù)用CURSOR取得的單位生成樹的第一層節(jié)點(diǎn) open dept_cur; loop fetch dept_cur into aa; exit when dept_cur%notfound; new_node := Ftree.Add_Tree_Node(htree, Ftree.ROOT_NODE, Ftree.parent_OFFSET, Ftree.LAST_CHILD, Ftree.EXPANDED_NODE, aa.dname, '', aa.deptno); end loop; close dept_cur; --根據(jù)雇員CURSOR生成樹的下層節(jié)點(diǎn) open emp_cur; loop fetch emp_cur into bb; exit when emp_cur%notfound; find_node := Ftree.Find_Tree_Node(htree, bb.kjbh, Ftree.FIND_NEXT, Ftree.NODE_value, Ftree.ROOT_node, Ftree.ROOT_NODE); new_node := Ftree.Add_Tree_Node(htree, find_node, Ftree.parent_OFFSET, Ftree.LAST_CHILD, Ftree.EXPANDED_NODE, bb.ename, '', bb.empno); end loop; close emp_cur; -- 得到樹的根節(jié)點(diǎn) ss := Ftree.get_tree_property(htree,FTREE.NODE_COUNT); -- 循環(huán),直到樹的所有節(jié)點(diǎn)都展開 for j in 1..ss LOOP exp_node; := Ftree.Find_Tree_Node(htree, ''); state := Ftree.Get_Tree_Node_Property(htree, j, Ftree.NODE_STATE); IF state = Ftree.COLLAPSED_NODE THEN Ftree.Set_Tree_Node_Property(htree, j, Ftree.NODE_STATE, Ftree.EXPANDED_NODE); END IF; END LOOP;二、 動(dòng)態(tài)記錄組層次樹所使用記錄組的數(shù)據(jù)格式: +; — Car -; — Airplane — Boeing — Boeing初始狀態(tài)層數(shù)顯示文本圖標(biāo)值-1(收縮節(jié)點(diǎn))1‘Car’''‘car’0(葉節(jié)點(diǎn))2'Honda''''civic'1(展開節(jié)點(diǎn))1'Airplane''''plane'02'Boeing''''747'02'Boeing''''757'生成記錄組的方式又分為兩種。 1、; 從查詢生成記錄組描述:利用樹的查詢語(yǔ)句(connect by…prior…start with…)生成記錄組,設(shè)置樹的屬性來生成。優(yōu)點(diǎn):編程簡(jiǎn)單,方便。缺點(diǎn):只適用于可以構(gòu)造出樹狀查詢語(yǔ)句的情況下。例子: v_ignore;;;;number; rg_emps;;;;;recordgroup;begin ;;rg_emps := find_group('EMPS'); --假如非空,則清空數(shù)據(jù) ;;if not id_null(rg_emps) then ;delete_group(rg_emps); ;;end if; ;;--構(gòu)造記錄組 ;;rg_emps := create_group_from_query('EMPS', 'select 1, level, ename, NULL, to_char(empno) ' 'from emp ';;; 'connect by prior empno = mgr ';;; 'start with job = ''PRESIDENT'''); v_ignore := populate_group(rg_emps); ftree.set_tree_property('tree_view.tree_emp', ftree.record_group, rg_emps);end;2、; 用行列數(shù)據(jù)直接構(gòu)造記錄組描述:記錄組一般為行列結(jié)構(gòu),以循環(huán)方式直接向記錄組中添加單元數(shù)據(jù)。優(yōu)點(diǎn):可直接控制記錄組的樣式。缺點(diǎn):對(duì)多層結(jié)構(gòu),編程也較為復(fù)雜。例子:--單位CURSOR cursor cursor_dept is selectdname, deptno from dept order by dname; --雇員CURSOR cursor cursor_emp(p_dno number) is select ;;ename, empno from emp where deptno = p_dno order by ename; v_i;number; v_ignore;;;;number; rg_emps;;;;;recordgroup; rg_depts;;;;recordgroup; v_init_stategroupcolumn; v_level;;;;;groupcolumn; v_label;;;;;groupcolumn; v_icon groupcolumn; v_value;;;;;groupcolumn;beginrg_depts := find_group('DEPTS');--如有數(shù)據(jù),則清空記錄組 if not id_null(rg_depts) then ;;;;delete_group(rg_depts); end if; rg_depts := create_group('DEPTS'); --這里自定義你需要的記錄組中列的數(shù)據(jù)類型和長(zhǎng)度 --初始狀態(tài)(指展開、收縮還是葉節(jié)點(diǎn)) v_init_state := add_group_column(rg_depts, 'init_state', number_column); --所在層數(shù) v_level;;;:= add_group_column(rg_depts, 'level', number_column); --顯示文本 v_label;;;:= add_group_column(rg_depts, 'label', char_column, 40); --圖標(biāo) v_icon;;;;:= add_group_column(rg_depts, 'icon', char_column, 20); --值 v_value;;;:= add_group_column(rg_depts, 'value', char_column, 5); v_i := 1; for deptrec in cursor_dept loop ;;;add_group_row(rg_depts, v_i); set_group_number_cell(v_init_state, v_i, 1); set_group_number_cell(v_level;;, v_i, 1); set_group_char_cell; (v_label;;, v_i, deptrec.dname); set_group_char_cell; (v_icon;;;, v_i, NULL); set_group_char_cell; (v_value;;, v_i, to_char(deptrec.deptno)); v_i := v_i + 1; for emprec in cursor_emp(deptrec.deptno) loop ;;add_group_row(rg_depts, v_i); ;;set_group_number_cell(v_init_state, v_i, 1); ;;set_group_number_cell(v_level;;, v_i, 2); ;;set_group_char_cell; (v_label;;, v_i, emprec.ename); ;;set_group_char_cell; (v_icon;;;, v_i, NULL); ;;set_group_char_cell; (v_value;;, v_i, to_char(emprec.empno)); v_i := v_i + 1; end loop; end loop; ftree.set_tree_property('tree_view.tree_org', ftree.record_group, rg_depts);end;結(jié)論:進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)盡量把父子結(jié)構(gòu)放在一張表,這樣,使用查詢生成記錄組再生成樹的方式最簡(jiǎn)單實(shí)用。 假如不能實(shí)現(xiàn),那么直接構(gòu)造記錄組也可生成樹。如無(wú)非凡要求,一般不采取對(duì)樹直接操作的方式。附注:作者一般將生成樹的程序放在Form Builder的“程序單元”中,在需要的地方調(diào)用來實(shí)時(shí)刷新樹。參考:Developer 6.0自帶的PL/SQL程序庫(kù):navigate.pll三、遺留問題由于developer簡(jiǎn)化了樹的設(shè)計(jì),那么一些對(duì)樹的轉(zhuǎn)移、拷貝等操作就不太輕易實(shí)現(xiàn)。這個(gè)課題還需要繼續(xù)研究。
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
综合亚洲深深色噜噜狠狠网站| 欧美天堂亚洲电影院在线播放| 欧美性三三影院| 亚洲国产日韩a在线播放性色| 国自产拍偷拍福利精品免费一| ww久久中文字幕| 国产成人av电影| 欧美一区二区视频在线观看2020 | 国产成人综合自拍| 欧美日韩不卡一区二区| 九色综合国产一区二区三区| 日本福利一区二区| 日本不卡一二三| 色婷婷亚洲婷婷| 日本视频一区二区三区| 欧美一a一片一级一片| 捆绑调教美女网站视频一区| 欧美日韩在线三级| 精品亚洲成a人| 3atv一区二区三区| 高清成人在线观看| 26uuu精品一区二区| 成人黄色a**站在线观看| 日韩三级免费观看| 不卡高清视频专区| 久久亚洲私人国产精品va媚药| 91亚洲精品久久久蜜桃| 国产精品天美传媒| 在线免费高清一区二区三区| 亚洲美女精品一区| 久久美女性网| 美洲天堂一区二卡三卡四卡视频 | 99久久精品免费观看| 精品国产一区二区三区忘忧草| 成人h动漫精品| 国产女同性恋一区二区| 99热免费精品在线观看| 亚洲一区二区在线免费观看视频 | 在线日韩国产精品| 国产一区二区三区四区五区入口| 91精品国产福利| 白白色亚洲国产精品| 亚洲国产精品ⅴa在线观看| 激情欧美一区| 亚洲成人777| 欧美色综合久久| 国产成人在线电影| 国产亚洲欧美在线| 国产精品久久久一区二区| 奇米影视在线99精品| 欧美不卡123| 精品999成人| 日韩1区2区3区| 日韩三级视频中文字幕| 欧美日本不卡| 亚洲va韩国va欧美va精品| 欧美日韩精品一区二区在线播放| 国产成人免费在线观看不卡| 国产视频一区二区在线| 久久福利毛片| 成人开心网精品视频| 综合久久综合久久| 久久蜜桃资源一区二区老牛| 国产高清精品网站| 国产精品国产精品国产专区不蜜 | 97se狠狠狠综合亚洲狠狠| 亚洲人成在线观看一区二区| 色婷婷综合中文久久一本| 成人毛片视频在线观看| 一区二区三区四区激情| 欧美久久久久久久久| 欧美视频不卡| 日本va欧美va精品发布| 精品99999| 免费亚洲一区二区| 懂色av一区二区夜夜嗨| 亚洲视频狠狠干| 欧美日韩一区二区三区视频| 91麻豆视频网站| 午夜av一区二区| 精品99999| 午夜综合激情| 99久久伊人精品| 亚洲国产精品久久人人爱| 日韩欧美一区二区在线视频| 影音国产精品| 激情欧美日韩一区二区| 欧美韩日一区二区三区四区| 久久久久综合| 欧美a级片一区| 久久国产乱子精品免费女| 日本一区二区三区电影| 在线日韩av片| 黄色一区二区三区四区| 国产一区二区三区在线看麻豆| 亚洲天堂精品视频| 日韩欧美第一区| 久久久综合香蕉尹人综合网| 91视视频在线观看入口直接观看www| 丝袜美腿一区二区三区| 国产精品理伦片| 337p亚洲精品色噜噜| 国产视频欧美| 99r国产精品| 久久成人免费日本黄色| 又紧又大又爽精品一区二区| 欧美成人艳星乳罩| 日本福利一区二区| 一区在线电影| www.欧美色图| 久久99最新地址| 亚洲妇女屁股眼交7| 欧美激情综合在线| 欧美一区二区久久久| 色婷婷综合五月| 日韩视频免费| 欧美久久视频| 成人午夜视频网站| 久久成人羞羞网站| 亚洲妇女屁股眼交7| 国产精品久久久久久久久果冻传媒 | 亚洲一二三四在线| 国产日韩欧美精品综合| 欧美电影一区二区| 久久免费高清| 一本色道久久综合亚洲二区三区| 99re热视频精品| 久久精品国产亚洲一区二区三区| 亚洲精品视频免费观看| 国产午夜精品福利| 日韩一区二区电影在线| 91黄色激情网站| 亚洲欧美日韩国产一区二区| 黄色一区三区| 午夜精品av| 色综合天天综合色综合av| 国产成人精品影视| 麻豆成人免费电影| 午夜精品成人在线| 亚洲夂夂婷婷色拍ww47| 亚洲欧洲综合另类| 国产精品护士白丝一区av| 久久久久久久久久久黄色| 91精品国产色综合久久久蜜香臀| 在线观看亚洲一区| 久久天堂精品| 午夜宅男欧美| 亚久久调教视频| 国产精品女主播一区二区三区| 激情欧美亚洲| 亚洲福利电影| 亚洲国产欧美不卡在线观看| 黄色在线一区| 亚洲日本欧美在线| 99精品国产在热久久| 一本色道久久综合一区| 亚洲美女色禁图| 亚洲国产精品一区制服丝袜| 国产精品对白刺激久久久| 欧美精品一区二区视频| 99国产欧美另类久久久精品 | 色呦呦一区二区三区| 香蕉视频成人在线观看 | 91福利视频网站| 久久中文在线| 久久人人超碰| 91国产成人在线| 欧美一a一片一级一片| 欧美日韩一卡二卡三卡 | 麻豆精品一区二区| 美国十次了思思久久精品导航| 日本aⅴ亚洲精品中文乱码| 日韩va欧美va亚洲va久久| 日韩专区中文字幕一区二区| 首页亚洲欧美制服丝腿| 日韩国产欧美在线观看| 蜜桃精品在线观看| 国产呦萝稀缺另类资源| 国产毛片精品一区| 粉嫩av一区二区三区在线播放| 高清不卡在线观看av| 成人国产一区二区三区精品| 欧美成人tv| 一区二区三区你懂的| 久久一日本道色综合久久| 欧美午夜精品理论片a级按摩| 欧美卡1卡2卡| 精品国产3级a| 成人欧美一区二区三区白人| 伊人开心综合网| 日韩av在线免费观看不卡| 激情综合亚洲精品| 国产成人综合在线观看| 91毛片在线观看| 亚洲国产精品123| 国产精品午夜av在线| 色综合久久88色综合天天6| 欧美日韩国产高清一区二区三区 | 国产精品久久久久久久久免费樱桃| 亚洲欧美日韩一区二区三区在线观看|