多關系表生成的樹結構
實際應用中經常需要由兩個或若干個關系表構成樹型結構,從表面上看,TdxDBTreeList 僅支持一個關系表。我們可以巧妙地利用 SQL 中功能強大的 SELECT 語句生成必要的數據源 DataSource 。SELECT 語句不僅可以由一個關系表生成元組集合,還可以由多表生成,語法形式為:
select ………. Union select …….. union select ………。
如存在如下兩個關系表 unit 部門表和 teacher 教師表:
create table unit (
unitNo varchar2(6) not null, ………..部門號
unitName varchar2(30), ……….部門名稱
superiorUnitNo varchar2(6), …..上級部門號
primary key (unitNo ))
create teacher (
teacherNo varchar2(8) not null , ……..教師號
teacherName varchar2(10) , ……..教師名
unitNo varchar(6), ……..教師所在教研室號
primary key (teacherNo),
foreign key unitNo(unitNo) references unit )
其中,teacher 表的字段 unitNo 為引用unit表的外鍵。假設unit 的關系表內容同表1;teacher的內容如下:
表2 teacher 關系表
teacherNo teacherName unitNo 00010001 Computer1 000101 00010002 Computer2 000102 00020001 Foreign1 000201 00020001 Foreign2 000202如要生成如圖2所示的來自unit 和 teacher 兩個關系表數據的樹型結構:
圖2 待生成的unit 和 teacher 兩個關系表數據的樹型結構
可以用下列語句:
select unitNo||' ' as unitNo,unitName, superiorUnit
from depart
union
select teacherNo as unitNo,teacherName as unitName,unitNo||' ' as superiorUnit from teacher
生成的數據集作為 TdxDBTreeList 的數據源;unitNo 作為 KeyField;superiorUnit 作為 ParentField 等。需要注意的是,其中 uintNo||' '是一種字符串連接運算,之所以要這麼做是因為 unit 關系模式中 unitNo 的字段寬度為 6 位,而 teacher 中的 teacherNo 為 8 位,作為 TdxDBTreeList 的 KeyFIEld 必須統一二者的寬度,否則可能出現問題,讀者可以親自試驗。
結論
樹型控件是一種強有力的交互工具,利用第三方提供的 data-aware 樹型控件可以效、可靠地開發應用程序。SQL 中的 SELECT 是一個功能強大的語句,靈活的使用它可以實現過程性語言所無法代替的效果。欲了解 TdxDBTreeList 的詳細情況可以查看該公司的網站 www.devexpress.com 。