六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

完成樹型結(jié)構(gòu)(一)

[摘要]實現(xiàn)樹型結(jié)構(gòu)(第一部分) 作者:ACE 最后更新:06/08/2000 類別:原創(chuàng) 先看一下示例,如果你感覺尚可,就繼續(xù)閱讀本文http://www.coolbel.com/ace/articles/test/msdn.asp。 1. 簡述 對于大家來說樹型結(jié)構(gòu)是很熟悉的一種模型。它的應(yīng)用十分廣泛...

實現(xiàn)樹型結(jié)構(gòu)(第一部分)
作者:ACE 最后更新:06/08/2000 類別:原創(chuàng)

先看一下示例,如果你感覺尚可,就繼續(xù)閱讀本文http://www.coolbel.com/ace/articles/test/msdn.asp。

1. 簡述

對于大家來說樹型結(jié)構(gòu)是很熟悉的一種模型。它的應(yīng)用十分廣泛,比如組織結(jié)構(gòu),物料清單,資料檔案管理,資產(chǎn)管理等等都是以樹型結(jié)構(gòu)為基礎(chǔ)。在現(xiàn)實生活中,有許多事物可以抽象為樹狀結(jié)構(gòu)。這種結(jié)構(gòu)可以簡化對某些事物的理解,使概念清晰。

2. 表結(jié)構(gòu)

樹型結(jié)構(gòu)的表結(jié)構(gòu)可以很簡單也可以很復(fù)雜。根據(jù)不同的需求,表結(jié)構(gòu)不是一成不變的,讀取數(shù)據(jù)的方法也不盡相同。

我們考慮一種最簡單的情況,看下面的示例:

Sample Table
Child Node Parent Node Title article
1 0 Program 0
2 1 Visual Basic 0
3 1 Power Builder 0
4 1 C++ Builder 0
5 2 ADO Control 1
..........
更直觀的表示:
Program
-------Visual Basic
------------ADO Control
-------Power Builder
-------C++ Builder

這種結(jié)構(gòu)十分簡單,當(dāng)修改元素間的所屬關(guān)系時,你只需要修改 Parent Node 就可以了,比如把 ADO Control 作為 Program 的子項,只要將 ADO Control 所對應(yīng)的 Parent Node 改為1。由此,不難看出這種結(jié)構(gòu)簡單,易用。

3. 用存儲過程讀取數(shù)據(jù)

如何檢索數(shù)據(jù),或許是我們最關(guān)心的。對于用戶來說,在數(shù)據(jù)的表達(dá)上要易于理解。從上面的示例中,就可以看出:直觀的表示法比顯示數(shù)據(jù)存儲結(jié)構(gòu)更易于理解。

其中的關(guān)鍵在于如何得到元素之間的層次關(guān)系,有了層次關(guān)系,就能得到類似資源管理器那樣的界面。

在這里,我們用存儲過程完成該功能。在微軟的眾多有關(guān) SQL 的文檔中,有一段 SQL 代碼非常經(jīng)典,我們本著拿來主義的思想,將它修改一下,洋為中用。

CREATE PROC sp_ListFile(@Child_node int)
As
SET NOCOUNT ON
--declare var
DECLARE @lvl smallint --層次關(guān)系
DECLARE @c_ID int
DECLARE @article bit --是否為文章的標(biāo)志
DECLARE @title varchar(150) --標(biāo)題

--create temporary table
CREATE TABLE #stack (Child_node int,Lvl smallint)

--create target table
CREATE TABLE #FileList
(lvl smallint,
Child_node_ID int,
Article bit,
Title varchar(150) )

--initial
INSERT INTO #stack VALUES(@Child_node,0)
SELECT @Lvl = 0

--main loop
WHILE @Lvl > -1
BEGIN
IF EXISTS(SELECT * FROM #stack WHERE Lvl = @Lvl)
BEGIN
SELECT @Child_node = Child_node
FROM #stack
WHERE Lvl = @Lvl

SELECT @article = article,@title = title
FROM some_table
WHERE Child_node = @Child_node

INSERT INTO #FileList
VALUES(@Lvl,@Child_node, @article,@title)

DELETE FROM #stack
WHERE Lvl = @Lvl AND Child_node = @Child_node

INSERT INTO #stack
SELECT Child_node,@Lvl + 1
FROM some_table
WHERE Parent_node = @Child_node
IF @@ROWCOUNT > 0
SELECT @Lvl = @Lvl + 1
END
ELSE
SELECT @Lvl = @Lvl - 1
END
DELETE FROM #FileList
WHERE Lvl = 0
SELECT * FROM #FileList

輸出結(jié)果:
lvl Child_node Article Title
1 1 0 Program
2 2 0 Visual Basic
3 5 1 ADO Control
2 3 0 Power Builder
2 4 0 C++ Builder

上面的存儲過程可以有很多變形,比如按時間排序,指定檢索深度等等,有的需要對數(shù)據(jù)庫作相應(yīng)調(diào)整。

4. 調(diào)用存儲過程


調(diào)用存儲過程有多種形式,我們只討論如何調(diào)用上面的存儲過程

Dim cnn
Dim rs
Dim id

Set cnn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
cnn.Open "Provider=SQLOLEDB;.......................略
rs.Open "sp_listfile " & id,cnn


由于 Coolbel 不支持存儲過程,我把結(jié)果集存為 XML 格式,以便于演示。 (出處:熱點網(wǎng)絡(luò))


主站蜘蛛池模板: 在线观看一区 | 特a级片| 在线天堂中文在线网 | 欧美特黄一区二区三区 | 伊人影视在线观看日韩区 | 欧美一区二区激情三区 | 在线h网站 | 一级黄色片看看 | 亚洲伊人久久大香线蕉在观 | 日夜啪 | 欧美在线网址 | 欧美特黄一级高清免费的香蕉 | 人成xxxwww免费视频 | 四虎成人免费 | 亚洲成肉网 | 色非网 | 日本欧美国产精品第一页久久 | 亚洲二区在线 | 中文字幕日韩在线一区国内 | 一级做a爰全过程免费视频毛片 | 涩涩涩涩涩涩涩 | 日韩美香港a一级毛片 | 色天天综合久久久久综合片 | 色黄网站成年女人色毛片 | 欧美一卡二卡3卡4卡无卡六卡七卡科普 | 色久天| 日本高清www色 | 影音先锋国产系列精品 | 日韩黄色小视频 | 日本翁熄系列乱在线视频 | 最近免费观看高清韩国日本大全 | 欧美一线天 | 色噜噜狠狠狠狠色综合久 | 四虎在线观看免费永久 | 天天摸夜夜添久久精品麻豆 | 亚洲天堂免费视频 | 亚洲成a人v大片在线观看 | 日韩国产欧美精品综合二区 | 在线视频韩国 | 色黄啪啪网 | 青草草视频在线观看 |