Data shaping(又可以被稱為分層記錄集) 如果你對(duì)ACCESS非常熟悉的話,它就類似與其中的子表。在你使用VB 進(jìn)行數(shù)據(jù)庫(kù)開發(fā)的時(shí)候是你的最佳選擇。 這種技術(shù)有很強(qiáng)大的運(yùn)用場(chǎng)合,特別適應(yīng)與OLTP等企業(yè)級(jí)運(yùn)用程序的開發(fā)。 它允許你使用一種樹狀結(jié)構(gòu)來(lái)表現(xiàn)你的數(shù)據(jù),所以它特別適合與 來(lái)給用戶顯示有關(guān)聯(lián)的數(shù)據(jù)表格形式。 簡(jiǎn)單的來(lái)說,就是它有一個(gè)母表(Recordset)然后 該母表中的某個(gè)字段中可以再容納一個(gè)子表(Recordset) 當(dāng)然一般來(lái)說,該子表中的某一個(gè)字段(例如主索引)和母表中的該字段 是關(guān)聯(lián)的(relationship),這樣當(dāng)你執(zhí)行一個(gè)查詢后,結(jié)果將返回一個(gè) 多記錄集.這種Data shaping技術(shù)給我們帶來(lái)的好處如下: 1。性能上的提高,只要合理運(yùn)用該技術(shù),就能夠大大提高 ASP連接數(shù)據(jù)庫(kù)程序的性能.你也不必再為同時(shí)顯示復(fù)雜的 相互關(guān)聯(lián)的數(shù)據(jù)表單而發(fā)愁了。 2。編程上的大大簡(jiǎn)化:由于它引入的分層記錄集結(jié)構(gòu), 使用樹狀視圖來(lái)顯示記錄,你會(huì)發(fā)現(xiàn)你使用Data Shaping技術(shù)顯示出來(lái) 的數(shù)據(jù)非常的美觀。 還是以前的方法,廢話少說,讓代碼來(lái)發(fā)言把: 本例子將使用SQL Server中帶的例子數(shù)據(jù)庫(kù)pubs 如何使用Data Shaping編程: 準(zhǔn)備工作如下: 1。你應(yīng)該安裝有MSDataShape OLEDB Provider(在MDAC2。0版本以上均帶該數(shù)據(jù)源提供者) 2。你應(yīng)該會(huì)編寫Shape語(yǔ)言,注意這不是一般的SQL語(yǔ)句,具體的語(yǔ)法你可以查看 ACCESS中的幫助文件。 幾個(gè)必須注意的地方 (I)建立一個(gè)MSDataShape OLEDB Provider的ConnectionString如下(呵呵,看來(lái)我的那篇 數(shù)據(jù)庫(kù)連接手冊(cè)又可以加點(diǎn)新東東了): '這是一個(gè)很普通的連接字符串,呵呵,其中的Kanga其實(shí)就是SQL Server在微軟內(nèi)部的代號(hào) strConn = "Provider=SQLOLEDB;Data Source=Kanga;" &_ " Initial Catalog=pubs;User Id=sa;Passwprd=" '好,現(xiàn)在加入MSDataShape OLEDB Provider部分 strConn = "Provider=MSDataShape; Data " & strConn 好了,現(xiàn)在你已經(jīng)設(shè)置數(shù)據(jù)的提供者為MSDataShape, 注意哦其中的數(shù)據(jù)源提供者是你真正的DSN部分。 (II)Shape語(yǔ)言 Shape語(yǔ)法你可以在ADO的幫助中可以找到詳細(xì)的描述,我也不羅嗦 一般最常用的語(yǔ)句如下: SHAPE {parent command} [AS parent alias] APPEND ({child command} [AS child alias] RELATE parent_column TO child_column) [AS parent_column_name] 一個(gè)最簡(jiǎn)單的例子如下: SHAPE {SELECT * FROM Publishers} APPEND ({SELECT * FROM Titles} RELATE Pub_ID TO Pub_ID) AS rsTitles 上面的語(yǔ)句將Titles表作為Publishers的一個(gè)子表關(guān)聯(lián)在一起,那么怎么訪問它 的數(shù)據(jù)了,語(yǔ)法如下: Set rsTitles = rsPublishers("rsTitles").Value 現(xiàn)在的rsTitles就是一個(gè)記錄集,它就是子表中的數(shù)據(jù) ASPShape.ASP文件代碼如下: <% Dim rsPublishers Dim rsTitles Dim strShapeConn Dim strShape Dim strConn strConn = "Provider=SQLOLEDB;Data Source=Kanga;" &_ " Initial Catalog=pubs;User Id=sa;Passwprd=" Set rsPublishers = Server.CreateObject("ADODB.RecordSet") strShapeConn = "Provider=MSDataShape; Data " & strConn strShape = "SHAPE {SELECT * FROM Publishers}" & _ " APPEND ({SELECT * FROM Titles}" & _ " RELATE Pub_ID TO Pub_ID) AS rsTitles" rsPublishers.Open strShape,strShapeConn Response.Write "<UL>" While Not rsPublishers.EOF Response.Write "<LI>" & rsPublishers("Pub_Name") Response.Write "<UL>" '下面開始顯示子表的數(shù)據(jù) Set rsTitles = rsPublsihers("rsTitles").Value While Not rsTitles.EOF Response.Write "<LI>" & rsTitles("title") rsTitles.MoveNext Wend Response.Write "</UL>" rsPublishers.MoveNext Wend Response.Write "</UL>" rsPublishers.Close Set rsPublishers = Nothing Set rsTitles = Nothing %> 大家可以運(yùn)行以上的代碼然后觀看它的結(jié)果,再和平常的 使用SQL查詢出來(lái)的相比較一下。 附注:這個(gè)時(shí)候只要再附加一點(diǎn)DHTML的語(yǔ)句,就能夠做成 樹狀結(jié)構(gòu)的收起和展開效果(就是類似與資源管理器左邊的那個(gè)效果) 呵呵,這方面掉掉可是非常在行的把。 呵呵,上面介紹的只是很簡(jiǎn)單的一個(gè)子表,下面簡(jiǎn)單介紹一下 多子表的情況。 如果你的數(shù)據(jù)表中只有一個(gè)子表的話,其實(shí)使用SQL也能夠來(lái)完成的, 還不能夠充分顯示Data Shaping技術(shù)的優(yōu)勢(shì),但是如果你的母表中 同時(shí)有多個(gè)字段和其他的表有關(guān)聯(lián)的話,你就可以充分看到這個(gè)技術(shù)的 威力了。 下面給出一個(gè)兩個(gè)子表的例子 SHAPE {SELECT * FROM Publishers} APPEND ({SELECT * FROM Titles} RELATE Pub_ID TO Pub_ID) AS rsTitles, ({SELECT * FROM Employee} RELATE Pub_ID TO Pub_ID) AS rsEmployees 簡(jiǎn)單把,呵呵。 這個(gè)還不算什么,要知道。如果當(dāng)你的數(shù)據(jù)表中的 子表還有子表時(shí),(這就是所謂的層狀結(jié)構(gòu)的記錄集嘛) 使用Data Shaping技術(shù)你會(huì)發(fā)現(xiàn)更加的方便。這也是為什么 我在開始的時(shí)候說的該技術(shù)特別適用與OLTP和企業(yè)級(jí)復(fù)雜的數(shù)據(jù)庫(kù)開發(fā)的緣故了。 下面是一個(gè)兩層子表的例子 SHAPE {SELECT * FROM Publishers} APPEND (( SHAPE {SELECT * FROM Titles} APPEND ({SELECT * FROM Sales} RELATE Title_ID TO Title_ID) AS rsSales) RELATE Pub_ID TO Pub_ID) AS rsTitles 其實(shí),不僅可以在Data Shaping中使用SQL語(yǔ)句,還可以使用存儲(chǔ)過程的。
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!