日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Oracle Form Builder中使用樹的心得

瀏覽:340日期:2023-11-22 09:26:08
一、樹的簡介Developer 6.0以上版本提供了hierarchy tree(層次樹)的概念,htree控件非常方便,只需要少量的編程即可實現顯示層次結構的目的。樹的特有屬性中如下幾個較為重要: l 多項選擇(Multi-Selection):是否答應一次選中樹的多個節點。假如不答應,那么;;;選中第二個節點時,第一個被選中的節點會取消選擇。l 記錄組(Record Group):指定生成樹的記錄組的名字。簡單介紹一下跟樹相關的觸發子(Built-in):l FUNCTION GET_TREE_NODE_PROPERTY (item_name VARCHAR2, node NODE,property NUMBER);功能:取得樹節點的屬性其中property有如下幾種:NODE_STATE:EXPANDED_NODE(擴展節點)COLLAPSED_NODE(收縮節點)LEAF_NODE(葉節點)--注:不能展開或收縮NODE_DEPTH:既節點在樹中的層級。NODE_LABEL:節點的顯示文本NODE_ICON:節點的圖標NODE_VALUE:節點的值。例子:DECLARE htree ITEM; node_value;VARCHAR2(100);BEGIN -- 得到樹 htree := Find_Item('tree_block.htree3'); -- 得到當前選中節點的值 node_value := Ftree.Get_Tree_Node_Property(htree, :SYSTEM.TRIGGER_NODE, Ftree.NODE_VALUE); ;...END;注釋:其中: SYSTEM.TRIGGER_NODE指當前選中的樹節點。l FUNCTION GET_TREE_PROPERTY (item_name VARCHAR2,property NUMBER);功能:取得樹的屬性其中property有如下幾種:DATASOURCERECORD_GROUPQUERY_TEXTNODE_COUNT:返回樹中節點的個數。SELECTION_COUNTALLOW_EMPTY_BRANCHESALLOW_MULTI-SELECTl PROCEDURE SET_TREE_NODE_PROPERTY (item_name VARCHAR2,node FTREE.NODE,property NUMBER,value VARCHAR2);功能:設置樹節點的屬性l PROCEDURE SET_TREE_PROPERTY (item_name VARCHAR2,property NUMBER, value VARCHAR2); PROCEDURE SET_TREE_PROPERTY (item_name VARCHAR2,property NUMBER, value RECORDGROUP);功能:設置樹的屬性l PROCEDURE POPULATE_TREE (item_name VARCHAR2);功能:清空樹中已有數據,并根據記錄組或數據查詢重新生成樹。l PROCEDURE ADD_TREE_DATA (item_name VARCHAR2,node FTREE.NODE, offset_type NUMBER,offset NUMBER,data_source NUMBER,data VARCHAR2);功能:在指定節點下添加樹中數據注:使用比較麻煩。 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的節點。參數:search_type:FIND_NEXT FIND_NEXT_CHILDSearch_by:NODE_LABEL NODE_VALUESearch_root:查詢的根節點,一般是Ftree.ROOT_NODEStart_point:查找的開始節點,一般是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);功能:添加樹節點。Offset_type:指定節點的分支類型,PARENT_OFFSET和SIBLING_OFFSETOffset:指定新節點的位置,PARENT_OFFSET:1..N ;;;;;;;LAST_CHILDSIBLING_OFFSET:NEXT_NODE ;;;;;;;PREVIOUS_NODEState:EXPANDED_NODE(擴展節點)COLLAPSED_NODE(收縮節點)LEAF_NODE(葉節點)l PROCEDURE DELETE_TREE_NODE(item_name VARCHAR2,node NODE);功能:刪除樹節點l FUNCTION GET_TREE_NODE_PARENT(item_name VARCHAR2,node NODE);功能:得到指定節點的父節點。l FUNCTION GET_TREE_SELECTION(item_name VARCHAR2,selection NUMBER);功能:得到處于選中狀態的節點。l PROCEDURE SET_TREE_SELECTION(item_name VARCHAR2,node NODE, selection_type NUMBER);功能:指定單個節點的選中狀態參數:selection_type:SELECT_ON SELECT_OFF SELECT_TOGGLEFORM運行態時有關的觸發器:l When-Tree-Node-Activated:用戶雙擊節點或在節點選中時按[ENTER]鍵時觸發。l When-Tree-Node-Expanded:節點展開或收縮時觸發l When-Tree-Node-Selected:當節點選中或取消選擇時觸發二、生成樹的方式樹控件一般單獨放在一個控制塊中(注:不能放在數據塊中),在畫布(CANVAS)上放置樹很輕易,并且,如無必要,樹的屬性也不需要設置。生成樹的方式有幾種:l 運行前通過設置記錄組或數據查詢屬性來生成l 通過ADD_TREE_DATA觸發子來實現l 運行態,通過ADD_TREE_NODE等觸發子來實現l 運行態,通過添加或刪除記錄組的數據元素來實現分析:一、 對樹直接操作描述:Find_Tree_Node找到指定節點,Add_Tree_Node來添加其下級節點。 缺點:編程較為復雜,操作不靈活,而且易出錯。優點:可以對添加節點等過程進行控制,實現一些非凡要求。例子: --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); -- 刪除單位節點及其子節點 IF NOT Ftree.ID_NULL(del_node) then Ftree.Delete_Tree_Node(htree, del_node); END IF; end loop; close dept_cur; -- 根據用CURSOR取得的單位生成樹的第一層節點 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; --根據雇員CURSOR生成樹的下層節點 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; -- 得到樹的根節點 ss := Ftree.get_tree_property(htree,FTREE.NODE_COUNT); -- 循環,直到樹的所有節點都展開 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;二、 動態記錄組層次樹所使用記錄組的數據格式: +; — Car -; — Airplane — Boeing — Boeing初始狀態層數顯示文本圖標值-1(收縮節點)1‘Car’''‘car’0(葉節點)2'Honda''''civic'1(展開節點)1'Airplane''''plane'02'Boeing''''747'02'Boeing''''757'生成記錄組的方式又分為兩種。 1、; 從查詢生成記錄組描述:利用樹的查詢語句(connect by…prior…start with…)生成記錄組,設置樹的屬性來生成。優點:編程簡單,方便。缺點:只適用于可以構造出樹狀查詢語句的情況下。例子: v_ignore;;;;number; rg_emps;;;;;recordgroup;begin ;;rg_emps := find_group('EMPS'); --假如非空,則清空數據 ;;if not id_null(rg_emps) then ;delete_group(rg_emps); ;;end if; ;;--構造記錄組 ;;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、; 用行列數據直接構造記錄組描述:記錄組一般為行列結構,以循環方式直接向記錄組中添加單元數據。優點:可直接控制記錄組的樣式。缺點:對多層結構,編程也較為復雜。例子:--單位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');--如有數據,則清空記錄組 if not id_null(rg_depts) then ;;;;delete_group(rg_depts); end if; rg_depts := create_group('DEPTS'); --這里自定義你需要的記錄組中列的數據類型和長度 --初始狀態(指展開、收縮還是葉節點) v_init_state := add_group_column(rg_depts, 'init_state', number_column); --所在層數 v_level;;;:= add_group_column(rg_depts, 'level', number_column); --顯示文本 v_label;;;:= add_group_column(rg_depts, 'label', char_column, 40); --圖標 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;結論:進行數據庫設計時盡量把父子結構放在一張表,這樣,使用查詢生成記錄組再生成樹的方式最簡單實用。 假如不能實現,那么直接構造記錄組也可生成樹。如無非凡要求,一般不采取對樹直接操作的方式。附注:作者一般將生成樹的程序放在Form Builder的“程序單元”中,在需要的地方調用來實時刷新樹。參考:Developer 6.0自帶的PL/SQL程序庫:navigate.pll三、遺留問題由于developer簡化了樹的設計,那么一些對樹的轉移、拷貝等操作就不太輕易實現。這個課題還需要繼續研究。
標簽: Oracle 數據庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品观看| 国产精品一区二区美女视频免费看 | 亚洲一区二区免费看| 高清av一区| 亚洲福利国产| 91精品在线免费视频| 国产乱人伦精品一区| 久久久久久美女精品| 韩日一区二区三区| 蜜臀久久久久久久| 精品成av人一区二区三区 | 亚洲精品a级片| 欧美精品九九| 久久亚洲国产精品一区二区| 国产精品66| 成人美女视频| 亚洲欧美久久| 黄在线观看免费网站ktv| 国产在线观看www| 久久视频精品| 国产精品一区二区三区av麻| 亚洲黄色免费av| 久久精品官网| 欧美在线首页| 狠狠爱成人网| 中文字幕在线看片| 在线精品国产亚洲| 99精品网站| 日韩视频一区| 日韩欧美1区| 香蕉成人av| 午夜亚洲精品| 欧美激情在线精品一区二区三区| 欧美日韩亚洲三区| 玖玖玖国产精品| 国产精品视频一区二区三区综合| 久久国产精品99国产| 亚洲美女久久| 黄色成人精品网站| 麻豆mv在线观看| 视频一区日韩| 久久在线免费| 亚洲综合精品| 国产偷自视频区视频一区二区| 人人草在线视频| 成人片免费看| 欧美一区二区三区高清视频| 在线中文字幕播放| 免费在线成人| 国产精品二区影院| 人人爱人人干婷婷丁香亚洲| 日韩精品亚洲专区| 亚洲一区二区小说| 欧美日韩精品一区二区三区视频| 日韩av福利| 丰满少妇一区| 国产欧美自拍一区| 午夜在线一区| 在线成人直播| 欧美激情综合| 国产欧美丝祙| 久久av一区二区三区| 免费一级欧美片在线观看网站| 亚洲麻豆一区| 国产调教精品| 日韩和欧美的一区| 久久精品影视| 国内亚洲精品| 亚洲欧美网站在线观看| 黄色精品视频| 日韩精品一区第一页| 中文精品在线| 亚洲欧美日韩一区在线观看| 蜜桃视频在线观看一区二区| 国产精品久久久久久妇女| 亚洲一区欧美二区| 国产毛片久久久| 私拍精品福利视频在线一区| 美女国产一区二区三区| 电影天堂国产精品| 伊人精品视频| 午夜精品影院| 日韩精品dvd| 欧美激情三区| 亚洲a级精品| 久久国产精品久久w女人spa| 97欧美在线视频| 国产精品4hu.www| 亚洲精品在线a| 黄色亚洲精品| 国产伦理一区| 国产精品亚洲成在人线| 日本欧美韩国一区三区| 性色av一区二区怡红| 午夜在线一区二区| 六月天综合网| 亚洲另类av| 日本在线一区二区三区| 日本国产亚洲| 国产亚洲精aa在线看 | 亚洲小说欧美另类婷婷| 久久国产亚洲| 中文一区在线| 99久久夜色精品国产亚洲1000部| 欧美伊人久久| 91精品一区国产高清在线gif| 亚洲高清不卡| 午夜一区在线| 在线天堂中文资源最新版| 蜜桃视频欧美| 亚洲精品在线二区| 美女性感视频久久| 亚洲精品观看| 国产亚洲福利| 国产综合亚洲精品一区二| 综合一区av| 亚洲大全视频| 高清一区二区三区| 欧美日韩视频一区二区三区| 伊人影院久久| 另类综合日韩欧美亚洲| 亚洲欧洲一区| 精品网站999| 久久不射网站| 黄色在线网站噜噜噜| 一区二区三区四区在线观看国产日韩| 国产精品中文| 99成人在线| 国产精品毛片久久久| 激情中国色综合| 国产欧美另类| 国产欧美一区二区色老头| 精品在线91| 欧美亚洲日本精品| 五月国产精品| 久久亚洲影院| 欧产日产国产精品视频| 欧美一区自拍| 韩国女主播一区二区三区| 亚州av一区| 国产v日韩v欧美v| 欧美三级第一页| 国产一区二区三区四区二区 | 久久中文字幕av| 久久av中文| 久久九九国产| 欧美亚洲福利| 国产毛片久久久| 日韩综合小视频| 国产在线|日韩| 国产精品任我爽爆在线播放 | 午夜在线视频观看日韩17c| 欧美aⅴ一区二区三区视频| 香蕉精品视频在线观看| 日韩精品中文字幕吗一区二区 | 激情久久五月| 国产精品亚洲综合久久| 亚洲少妇自拍| 精品国模一区二区三区| 一二三区精品| 午夜精品婷婷| 三级久久三级久久久| 精品国产乱码久久久久久1区2匹| 日韩高清一区| 午夜精品影视国产一区在线麻豆| 蜜桃成人精品| 日本一区二区高清不卡| 日韩不卡一二三区| 樱桃视频成人在线观看| 国产精品久久国产愉拍| 婷婷成人在线| 一本色道久久精品| 在线精品一区| 91精品国产自产在线丝袜啪| 日韩免费福利视频| 亚洲一区二区免费看| av成人国产| 久久九九精品| 日韩精品一区二区三区中文字幕| 国产探花一区二区| 亚洲深夜av| 国产精品一区二区美女视频免费看| 麻豆中文一区二区| 日韩av有码| 日韩视频二区| 国产精品红桃| 福利一区二区三区视频在线观看| 日韩精品欧美大片| 97国产成人高清在线观看| 色爱av综合网| 超碰成人av| 中文字幕一区二区三区日韩精品 | 激情中国色综合| 亚洲免费观看高清完整版在线观| 欧美激情福利| 91精品国产调教在线观看| 国产精品99视频| 日本欧美久久久久免费播放网| 999久久久国产精品| 日韩欧美激情|