設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 4279|回復(fù): 6
打印 上一主題 下一主題

[ADO/DAO] [轉(zhuǎn)帖]深入ADO(MSDN)

[復(fù)制鏈接]

點擊這里給我發(fā)消息

跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2004-7-15 17:40:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
<轉(zhuǎn)自中文MSDN: http://www.microsoft.com/china/MSDN/library/archives/technic/develop/ADO.asp >



<H1 align=center>深入AD用Visual Studio 6.0來編寫Active Data Objects 2.0

Active Data Objects結(jié)合了OLE DB的普遍性質(zhì)—那就是在諸如RDO和DAO模型中可以找到的易于使用的特性.ADO包含了所有可以被OLE DB標(biāo)準(zhǔn)接口描述的數(shù)據(jù)類型.換而言之,ADO是可擴充的,不需要對你的部件做任何工作.

數(shù)據(jù)的訪問和操縱是任何實際的應(yīng)用程序的一個固有部分.對于數(shù)據(jù)來說,無論它是否是關(guān)系型的,無論它是否存在一個DBMS,也無論它的存儲平臺是什么,數(shù)據(jù)就是數(shù)據(jù)—一個文件沒有必要一定是給定的二進制格式.

開發(fā)者群體需要具有簡單接口的現(xiàn)代的開發(fā)工具以快速訪問數(shù)據(jù).微軟對此問題的回答是Universal Data Access(UDA通用數(shù)據(jù)訪問)體系結(jié)構(gòu),對此,Stephen Rauch的文章 “Manage Data from Myriad Sources with the Universal Data Access Interfaces”中有詳細的闡述(MSJ,1997年9月).簡單的說,UDA是一種將OLE DB應(yīng)用于實際的理論.所有的都被指向一個數(shù)據(jù)源—一個電子表格,一條電子郵件消息,或一份AS/400文檔—由OLE DB接口過濾并以一種通用的格式表示,這樣應(yīng)用程序能總是以同樣的方式對數(shù)據(jù)進行訪問.位于OLE DB上的并處理來自應(yīng)用程序的調(diào)用的中間層被稱作Active Data Objects(ADO).它是編寫針對帶有OLE DB提供者的任何類型的數(shù)據(jù)源的推薦標(biāo)準(zhǔn).



圖 1 OLE DB

讓我們仔細看看Visual Studio 6.0所帶來的ADO 2.0的新特性.我將向你展示如何用Visual Studio 6.0套件來編寫ADO.我將集中于Java語言的Windows Foundation Classes(WFC)的和Visual Basic的內(nèi)置的ADO支持,對于Visual C++和InterDev將略微提一提.

 

ADO概述


ADO是一個對象模型,它結(jié)合了OLE DB易于使用的特性以及在諸如Remote Data Objects(RDO)和Data Access Objects(DAO)的模型中容易找到的通用特性.ADO是一個可以通過IDispatch和vtable函數(shù)訪問的COM自動化服務(wù)器.最重要的是:ADO包含了所有可以被OLE DB標(biāo)準(zhǔn)接口描述的數(shù)據(jù)類型.換而言之,ADO對象模型具有可擴展性,它不需要你對自己的部件做任何工作.通過通常的ADO編程接口,你可以可視化地處理所有的事,即使那些記錄集的信息的格式是你從來沒有想到過會見到的.

ADO在其實際運行中得到了很高的評價,內(nèi)存覆蓋,線程安全,分布式事務(wù)支持,基于Web的遠程數(shù)據(jù)訪問.作為Microsoft UDA策略的一部分,ADO試圖成為基于跨平臺的,數(shù)據(jù)源異構(gòu)的數(shù)據(jù)訪問的標(biāo)準(zhǔn)模型.隨著時間的流逝,它將取代其他模型.ADO集中了RDO和DAO的所有最好的特性,并將它們重新組織在一個同樣可以提供對事件的充分支持的略微有點不同的對象模型中.如果你想深入的鉆研一下Microsoft的數(shù)據(jù)訪問技術(shù)之間的不同,你可以看看 “Data Access Technologies”,這是由Robert Green寫的MSDN的關(guān)于技術(shù)性方面的文章.

將你當(dāng)前的基于RDO的系統(tǒng)移植為ADO的不需要對系統(tǒng)的完全的重構(gòu),但它也不是件微不足道的事情.移植系統(tǒng)的難度和復(fù)雜性比RDO和ADO的差異大.移植為ADO是很有價值的,但是我建議如果不是絕對必要的話請你不要這樣做.

 

從企業(yè)的觀點來看ADO


UDA給Windows DNA(Distributed Internet Applications分布式互連網(wǎng)應(yīng)用程序)體系結(jié)構(gòu)以一個數(shù)據(jù)訪問和存取的機制.為進一步了解UDA,你可以看 “Say UDA for All Your Data Acess Needs,”該文是由Aaron Skonnard寫的(見Microsoft Interactive Developer,1998年4月).

<FONT face=Verdana>即使是跨了多個硬件平臺,任何一個分布式企業(yè)系統(tǒng)都有多個數(shù)據(jù)源,包括Microsoft Access數(shù)據(jù)庫,電子表格和SQL Server表.最近,我參加了一個異構(gòu)的圖象數(shù)據(jù)庫的研究,其內(nèi)容包括:SQL Server表(包括圖象及其描述),通過與名字相關(guān)的ASCII碼和Word文檔對圖象進行分類索引,所有者文件中既有圖象又有文本.當(dāng)你需要對付這樣的工程時,你會開始認(rèn)識到統(tǒng)一的方法和對象公共集的重要性了.我曾經(jīng)見過在相關(guān)的工程中使用不同的訪問數(shù)據(jù)方法的開發(fā)團隊.這種情況是經(jīng)常發(fā)生的,這是因為其中一個團隊相當(dāng)早的提前對子項目進行了開發(fā),或者由于

本帖被以下淘專輯推薦:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖1 訂閱訂閱

點擊這里給我發(fā)消息

2#
 樓主| 發(fā)表于 2004-7-15 17:42:00 | 只看該作者
ADO快速教程

ADO對象模型是由相對數(shù)量較少的對象組成.不象RDO對象模型,每個主要的ADO對象都能被個別的被創(chuàng)建.這就意味著,舉例說吧,你不需要在創(chuàng)建有效的記錄集對象前創(chuàng)建一個連接.



Dim cn As New ADODB.Connection

Dim rs As New ADODB.Recordset

cn.Open "Biblio"

rs.Open "select * from titles where title like '%h'", cn

ADO 2.0對象是Connection,Command,Parameter,Recordset,Field,Error和Property.ADO對象模型也包括四個類集:它們分別是一套相關(guān)的Error,Parameter,Property和Field對象.讓我們來看看每個對象的主要特性.

Connection對象提供連接,該連接連接的程序中存有它正在訪問的數(shù)據(jù)源.屬性允許你定義:連接串,命令執(zhí)行以及連接啟動的間隔時間,數(shù)據(jù)提供者,(無論臨時表位置是應(yīng)該在客戶端還是在服務(wù)器端),和對于數(shù)據(jù)的訪問權(quán)限.方法有關(guān)于如下功能的:執(zhí)行命令,打開和關(guān)閉一個連接和管理事務(wù).

在許多地方你可以指定你想使用的提供者:通過Provider屬性,在連接字符串中,或者甚至通過Open方法.選擇你最喜歡的實現(xiàn)方式,但要保證你沒有為同樣的連接指定多個的提供者.缺省的提供者(當(dāng)

你沒有指定你自己的提供者的情況下)是MSDASQL,針對ODBC的Microsoft OLE DB提供者.

Command對象定義了一個SQL聲明,一個存儲過程,或任何其他的你可能想讓提供者執(zhí)行的關(guān)于數(shù)據(jù)的操作.Command的屬性有:當(dāng)前連接,最大允許執(zhí)行時間和參數(shù)集.一個參數(shù)就是你將它作為參數(shù)傳遞給命令的值.在這些屬性中用以區(qū)分一個參數(shù)的屬性有:方向(輸入,輸出,或者兩者都有),類型當(dāng)然還有它們的值.

記錄集對象也許是最典型的ADO對象,然而它是最復(fù)雜的當(dāng)中的一個.它表示命令執(zhí)行的結(jié)果,并且它大多是以數(shù)據(jù)庫的記錄集的形式給出.一個記錄集是由以行和域的形式表示的信息組成.它不一定非要映射成關(guān)系型數(shù)據(jù)庫的記錄.實際上,如同我早些時候解釋的那樣,ADO是基于OLE DB并且能被用來可視化地訪問任何數(shù)據(jù)源中的數(shù)據(jù),這數(shù)據(jù)源包括非關(guān)系型的數(shù)據(jù)庫.記錄集提供了緩沖能力,它接受數(shù)據(jù)的變化,并且將這些變化以批處理的方式傳給服務(wù)器.你可以瀏覽并對記錄集的內(nèi)容分類,如同列舉和提取行.你也能通過如:刪除,添加和刷新操作等任何方式修改數(shù)據(jù).記錄集存在跟連接的嚴(yán)格的關(guān)系,但是這不意味著你總是需要一個打開的連接來獲得一個記錄集.你也可以按如下方式進行:



Dim RS As New ADODB.Recordset

sql = "select * from authors"

RS.Open sql, "ubs"

既然Connection實際上是數(shù)據(jù)和命令傳送的通道,所以該對象仍然被創(chuàng)建了,除了一個名字叫做Recordset.ActiveConnection的屬性外,它是不可見的并工作在后臺.

Field對象是一列同類的數(shù)據(jù).它提供了一種這樣的編程接口,即能讓你可以對單個單元的值以及基本的特征如:類型和大小進行讀和寫.所有給定記錄集的Field對象形成了一個Field集.如我將在后面向你說明的, Fields集隱藏著一個引人注目的特性,它將再次證明Recordset對象的靈活性.

最后是Property對象.每個對象都有屬性.提供的使用了ADO的對象可能是各種各樣的.但不存在這樣一套屬性即包含了所有可能的OLE DB提供者的靜態(tài)的屬性.因此,任何一個ADO對象都有靜態(tài)和動態(tài)的屬性.第一套屬性集:包括Name,Type,Value和Attributes,都可以通過如下的語法來訪問:

obj.PropertyName

最開始的三個屬性都是自我說明性的.Attributes是一種數(shù)字式的描述符,它是以按位的跟提供者的能力有關(guān)的一些預(yù)定義的屬性組合.(它類似于COM服務(wù)器的組件分類).

動態(tài)屬性是跟潛在的提供者類型相應(yīng)的.它們被歸進Properties集合,并可以通過名字查詢.



obj.Properties("propName")

The New Recordset Object

ADO 2.0包括一些新的功能(見圖3).現(xiàn)在可以通過GetString方法把記錄集扁平化變成一個字符串.

<BLOCKQUOTE>

Set Variant = recordset.GetString(

StringFormat,

NumRows,

<FONT face=Verdana>ColumnDelimiter, </FON

點擊這里給我發(fā)消息

3#
 樓主| 發(fā)表于 2004-7-15 17:43:00 | 只看該作者
記錄集的延續(xù)和緩沖

幾個月前,一個讀者給我發(fā)了個EMAIL,這里面有個很奇怪的問題.他說 “我喜歡象記錄集這樣的結(jié)構(gòu),并且我在任何時候都用它們.ADO記錄集可以用來進行對數(shù)據(jù)的緩沖而不需要涉及到數(shù)據(jù)庫連接或者,甚至OLE DB提供者?”我迅速對此回答: “不,我認(rèn)為你不能這樣做.記錄集無論如何都需要一個連接.”

通過更進一步的思考,我覺得他說到了最重要的問題上.ADO記錄集是個靈活的,最優(yōu)的數(shù)據(jù)結(jié)構(gòu).它們能跟OLE DB數(shù)據(jù)庫很好的工作,但是遺憾的是你并不能在任何你需要一個強大的使用方便數(shù)據(jù)結(jié)構(gòu)的時候使用它們.但這里有個好消息.ADO 2.0給你提供了針對這一問題的新特性.Field集提供了相當(dāng)新的Append方法,它能在最初就創(chuàng)建一個記錄集.



Dim RS As New ADODB.Recordset

RS.CursorLocation = adUseClient

RS.Fields.Append "Name", adBSTR

RS.Fields.Append "City", adBSTR

RS.Open

RS.AddNew

RS!Name = "DinoE"

RS!City = "Redmond"

這里是一個ADO記錄集,它就沒有數(shù)據(jù)庫連接和OLE DB的概念.ADO記錄集總歸是個獨立的對象了.要緊的是你所選擇的客戶指針以及將你的新的域添加到記錄集的Fields集中去.Append方法需要兩個非選擇性的參數(shù):域名和類型.如果你想要字符串的話那就用adBSTR.

如果是這樣的話,想象使用它的應(yīng)用程序是個直接的辦法.如:你可以寫代碼讀你的老的所有者文件并將它們的數(shù)據(jù)轉(zhuǎn)到記錄集中.

這只是一個由磁盤文件創(chuàng)建記錄集的方法.ADO 2.0增加了對記錄集的延續(xù)性的支持.實際上,你有了個名為Save的新方法,它帶有兩個參數(shù):輸出文件名和數(shù)據(jù)格式.



Dim rs As New ADODB.Recordset

rs.adUseClient

rs.Save "c:\demo.rst", adPersistADTG

目前,只有adPersistADTG(也就是零)是允許的.只有打開的記錄集才能執(zhí)行存儲.存儲的數(shù)據(jù)也可能會受你所使用的過濾器的影響.注意在記錄集關(guān)閉前該方法不會關(guān)閉文件的.在這中間,文件是作為只讀方式訪問的.這使得ADO應(yīng)用程序用Save方法來創(chuàng)建平行且延續(xù)的緩沖變得更容易了.如果該文件已經(jīng)存在了,Save方法返回一個錯誤,并準(zhǔn)備執(zhí)行一個工作環(huán)境.而且,該方法將當(dāng)前行的位置移到第一個記錄處.它將所有與記錄集相關(guān)的東西(包括數(shù)據(jù)和和圖表)都存到磁盤上.然而,它并不存儲連接和命令信息.這將Save和GetString區(qū)分開來,并使得應(yīng)用程序能加載先前存入的記錄集.使用的方法是:



rs.Open "c:\demo.rst"

再次說明:使用客戶端指針對于你來說是重要的.

 

異步獲取和事件處理


ADO 2.0也可以讓你以這樣的方式執(zhí)行命令:即以異步方式獲取數(shù)據(jù).這發(fā)生在調(diào)用Open方法的語法中.



recordset.Open Source, ActiveConnection, CursorType,

LockType, Options

跟通常一樣,Source參數(shù)被指定一個有效的SQL字符串(甚至可能是一個被存儲的過程的名字),一個先前被存儲的文件的名字,或者是一個Command對象.Options參數(shù)限定命令,并且可能影響提供者處理它的方式.特別是它可以設(shè)定值為adExecuteAsync或adFethchAsync.adFetchAysnc意味著Source命令必須是以異步的方式執(zhí)行,也就是說,該方法是立即返回的并且提供者在操作結(jié)束時激活一個事件.就另一方面來說,adFetchAsync使得第一塊中的那些行被同步地取出(跟通常一樣).其大小由記錄集中的CacheSize屬性中所存的值來決定.剩下的那些行被異步的載入.

當(dāng)一個軟件以異步的方式運行時,平臺應(yīng)該提供一種方式使得用戶知道它什么時候結(jié)束.對于這問題有不同的實現(xiàn)方法,Platform SDK使用的是同步對象,Microsoft Internet Explorer Remote Scripting使用的是回調(diào)函數(shù).ADO選擇的是第三種方法,也許對RAD編程者來說是最合適的一種方法:事件.

<FONT face=Verdana>這當(dāng)中有兩類事件:與Connection對象相關(guān)的事件(ConnectionEvent接口)和屬于Recordset對象的(RecordEvent接口)(見圖5).在許多情況下你的程序?qū)谔囟ǖ牟僮靼l(fā)生的前后被通知.在一個操作發(fā)生后引發(fā)的

點擊這里給我發(fā)消息

4#
 樓主| 發(fā)表于 2004-7-15 17:45:00 | 只看該作者
分層目錄結(jié)構(gòu)指針和數(shù)據(jù)成形

如果你處理數(shù)據(jù),那么很可能你需要將它從多個表中提取出來.在大多數(shù)情況下,你使用JOIN命令合并相關(guān)表中的數(shù)據(jù),特別是在你訪問關(guān)系型數(shù)據(jù)庫的情況下.任何由JION命令形成的記錄集總是包含了多余的信息.例如,如果你對一個作者的所有書籍感興趣的話,你可以合并Authors和Title Author表(我在這里指的是Biblio和PUBS數(shù)據(jù)庫).在返回的記錄集中,關(guān)于作者的信息在每一行中無效地重復(fù).

你合并的嵌套次數(shù)越多或越復(fù)雜,消除多余信息對于你來說就越重要,分層目錄結(jié)構(gòu)指針允許你以基于樹形的邏輯來組織你的記錄集.該過程也叫做數(shù)據(jù)成形,并且它可以以兩種方式來實現(xiàn).你可以用類似于SQL的成形語言,或者你可以通過使用Visual Studio 6.0的相應(yīng)的高級工具.我將在后面提供一個例子.現(xiàn)在我們來看看成形語言.



就某方面來說,成形語言顯得跟SQL語言類似.

SHAPE {select au_ID, Author from authors}

APPEND ( {select ISBN from [title author]}

AS chapter RELATE au_id TO au_id)

一般說來,SHAPE命令定義記錄集,APPEND子句添加一個子記錄集到它當(dāng)中去.換而言之,記錄集可以作為一個域的其他任何數(shù)據(jù)類型使用.(見圖6).父記錄集和子記錄集是通過域與域間的關(guān)系實現(xiàn)連接,該關(guān)系同樣需要一個名稱.



圖 6 APPEND 記錄集

作為數(shù)據(jù)成形的結(jié)果,父記錄集附加了新的一列.每行中的新的域都是指向定義在APPEND從句中所定義的記錄集.子記錄集只列舉那些au_id值跟父記錄集中相同的域的是匹配的記錄.在前面的代碼中,如果給出一個作者的ID,那么存在一個記錄集,在它當(dāng)中有一個叫Chapter的附加的域,它的Value屬性是指向一個子記錄集,該子記錄集中有來自于Title Autor表的所有所請求的域,在本例中,是ISBN.圖7舉例說明了一些用于分層目錄結(jié)構(gòu)記錄的定位的Visual Basic源代碼.注意我是怎樣通過名稱來訪問Chapter域.為了得到實際的子記錄集,還需要另外一個步驟:調(diào)用Value屬性.

SHAPE命令也可以嵌套.這意味著你能用其他的SHAPE命令作為APPEND的內(nèi)部命令.跟SHAPE語法打交道如同手工書寫SQL查詢一樣也是件煩人的事情.幸運的是,Visual Studio 6.0給你提供了高級的工具它可以顯著地簡化SHAPE查詢地定義.我將簡要地說明這一點.

APPEND不是唯一一個你可以附在SHAPE命令上的從句. 你還可以改用一個COMPUTE從句來代替.COMPUTE能讓你對已有的行執(zhí)行統(tǒng)計功能,或按一個或更多的域進行分組.其預(yù)定義的函數(shù)有SUM, AVG, MAX和MIN.在最后的記錄集里就給出了父行的這些操作的結(jié)果.而且,該記錄集也包含了一個引用域,它指向由COMPUTE處理的原始行所在實際表.是不是覺得不太明白?讓我們來看看一個例子.



假設(shè)你有個客戶定單表.一天,你想知道每個姓是以A開頭的客戶的定單的總數(shù).

SHAPE {select custID, last name

from orders where last name

like 'A%''}

COMPUTE (SUM(amount)) AS

chapter

BY custID

圖8說明了結(jié)果記錄集.你有用戶的ID,姓,和訂單的總數(shù),除了客戶定單的列表引用外,其它的都是形式非常簡單的.



圖 8 COMPUTE 記錄集

為在較底的層次上(也就是說,沒有用專用工具的情況下)實現(xiàn)數(shù)據(jù)成形功能,你得指定你的提供者為MSDataShape.



Dim cnn As New ADODB.Connection

cnn.Provider = "MSDataShape"

cnn.Open "Biblio"

 

Visual Basic 6.0 數(shù)據(jù)環(huán)境設(shè)計器


<FONT face=Verdana>Visual Basic 6.0的最引人注目的新特性之一就是Data Environment Designer數(shù)據(jù)環(huán)境設(shè)計器(見圖9).它是個一般的,設(shè)計時環(huán)境,它能讓你可視化地安排三種類型的數(shù)據(jù)工具:連接,命令和記錄集.Data Env

點擊這里給我發(fā)消息

5#
 樓主| 發(fā)表于 2004-7-15 17:46:00 | 只看該作者
在不同的環(huán)境下編寫ADO

當(dāng)用Visual Basic 6.0編寫ADO時,你不能忽視Hierarchical FlexGrid(HFlexGrid)控件,見圖15所示.



圖 15 Hierchical FlexGrid

它顯然比原來版本的Visual Basic的FlexGrid控件好得多.它得新特性如名稱暗示的那樣:內(nèi)置對分層目錄結(jié)構(gòu)的記錄集的支持.圖16顯示了一個簡單的基于Visual Basic 6.0的程序,它用到了HFlexGrid控件并概述了我目前所涉及的所有的ADO的特性.在該例子中,我定義了一個DataEnvironment對象并用它來從包含了一個作者的所有的書的Biblio中獲取一個記錄集.Data Environment鍵和HFlexGrid控件間缺少的連接可在該片段中找到.



圖 16 演示程序



Private Sub cmdDataEnv_Click()

Set hflex.DataSource =

DataEnv

Set hflex.DataMember =

DataEnv.RecordsetName

End Sub

該代碼自動定義了DataEnvironment對象,在早先我是將它定義來作為HFlexGrid控件的數(shù)據(jù)源. HFlexGrid控件也可以成功的用于顯示平面記錄集并且在功能上是跟原來版本的Visual Basic一樣的.

可以通過新的名為MsAdoDC.ocx的ActiveX控件來使得ADO的功能可用.它看起來象早先的但目前仍然被支持的Data控件.ADODC被假定為在你喜歡上它后將取代Data控件.如你可能猜到的那樣, ADODC具有Data控件中所沒有的特性.它是基于OLE DB的并公開了ADO 2.0編程接口.



圖 17 ADODC控件

在Visual Studio 6.0中,Visual InterDev是個主要的Web開發(fā)工具.它有兩個專門的特性: Data Environment對象(相同的東西在Visual Basic中也能被找到)和Recordset設(shè)計時控件.該思想是簡單的,添加Data Environment對象到工程中,定義你的數(shù)據(jù)連接,查詢和完成其它你所需要的任何工作.當(dāng)你完成后,你將Recordset設(shè)計時控件插入到你的Active Server Pagers中,并從Data Environment集合--Recordsets, Commands, Connections中提取你所需要的數(shù)據(jù)對象(記錄集,命令和連接).



<script language="JavaScript" runat="server">

function InitRS()

{

thisPage.createDE();

var rsTemp = DE.Recordsets('authors');

rsAuthors.setRecordSource(rsTemp);

rsAuthors.open();

}

先前的代碼段說明了一個JavaScript過程,它恢復(fù)一個記錄集并為在頁面中進一步使用它而打開它.

在C++下使用ADO,并且通常使用源于C++的高級對象模型,常常引起下面的問題即需要將方法返回的Variant類型轉(zhuǎn)換成語言的本地類型.由于這個原因,ADO 2.0公開了附加的叫做IADORecordBinding的接口,使得你將記錄集的特定類型綁定為C++類型.這可以通過如下步驟來完成:

定義一個從CADORecordBinding派生出來的類并在頭文件irsint.h里聲明它.這個類必須有如下三個方法: BindToRecordSet, AddNew和Update.

將盡可能多的所需要的數(shù)據(jù)成員添加到類中以映射記錄集的域.通過使用其中一個如下的預(yù)定義的宏將每個記錄集的域跟它相應(yīng)的數(shù)據(jù)成員綁定起來, ADO_VARIABLE_LENGTH_BINDING_ENTRY, ADO_FIXED_LENGTH_BINDING_ENTRY和ADO_NUMERIC_BINDING_ENTRY.所有這些對宏的調(diào)用必須由下面的給包圍起來.



BEGIN_ADO_BINDING

END_ADO_BINDING

當(dāng)你得到一個記錄集,調(diào)用BindToRecordset,將其指針傳給你的類.

<FONT face=Verdana>現(xiàn)在,根據(jù)你的需要對記錄集進行處理.重要的是從現(xiàn)在開始你可以對你自己的數(shù)據(jù)成員而不是

點擊這里給我發(fā)消息

6#
 樓主| 發(fā)表于 2004-7-15 17:47:00 | 只看該作者
Web端的ADO

去年當(dāng)Internet Explorer 4.0發(fā)布時,很少有編程者真正領(lǐng)會到數(shù)據(jù)綁定特性的重要性.該特性看起來太棒了,但是它依賴于Internet Explorer 4.0并且缺乏適當(dāng)?shù)睦雍蛻?yīng)用程序.數(shù)據(jù)綁定是一項基于Web的技術(shù),它能讓你不離開當(dāng)前頁面去訪問遠程的數(shù)據(jù)源.換而言之,數(shù)據(jù)綁定是數(shù)據(jù)覺察控件的Web版.如果你使用它,你能讓數(shù)據(jù)綁定HTML標(biāo)簽.舉例來說吧,你可以將一個<TABLE>連接到一個特定的數(shù)據(jù)源并且可以讓行和列在記錄實際上進來的時候進行異步的添加.一旦你建立一個綁定,你(和你的用戶)不再需要做其他的事情.

數(shù)據(jù)綁定是通過一個叫做Data Source Object(DSO)的模塊來實現(xiàn)的,它實際上是一個ActiveX控件,它起到的大致作用是一個介于數(shù)據(jù)庫和Web頁面的代理.Microsoft為Internet Explorer 4.0提供了兩個DS Tabular Data Control (TDC) 和 Advanced Data Control (ADC).TDC只能處理基于文本的數(shù)據(jù),而ADC能連接到任意ODBC源.為有個初步的認(rèn)識,你可以參考Rich Rollmann (MIND, July 1997)寫的文章"Data Binding in Dynamic HTML".現(xiàn)在,ADC演變?yōu)镽DS—它是Web端的UDA和ADO的一部分,它被認(rèn)為是專門用于Internet的.

其中一個RDS是一個名叫RDS.DataControl 的ActiveX控件,你可以將它放到HTML頁面里.通過使用數(shù)據(jù)綁定技術(shù),你可以在客戶端有效地管理記錄集.你可以對行進行定位,分類,刷新而不需要進一步跟服務(wù)器聯(lián)系.只有在刷新掛起的變化時你才要回到服務(wù)器上.RDS在客戶端對數(shù)據(jù)進行緩存并極大地減少了對往返行程的需要.下面的代碼行顯示了如何在HTML頁面中使用RDS來填寫一個表單.



<object id="rds"

classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33">

</object>

<table datasrc="#rds">

<thead><tr>

<th>First Column</th>

<th>Second Column</th>

</tr></thead>

<td><span datafld="FieldName1"></span></td>

<td><span datafld="FieldName2"></span></td>

</table>

 

RDS數(shù)據(jù)工廠


并不是所有的RDS都在客戶端.當(dāng)你通過VBScript或Jscript調(diào)用RDS ActiveX控件的方法時,你實際上最后調(diào)用的是RDS Data Factory Server (RDSServer.DataFactory對象),它是位于Web的服務(wù)器空間的.由于這個因素,數(shù)據(jù)綁定可以將你綁定到一個相容的瀏覽器上或一個激活了RDS的服務(wù)器上.

RDS Data Factory通過ADO接口以訪問下面的數(shù)據(jù)源的方式來獲取請求并完成它們.(見圖18).它只是完成查詢和更新的工作.



圖 18 RDS的體系結(jié)構(gòu)

目前,RDS被定義為ADO的一部分并成為整個UDA體系結(jié)構(gòu)的一個基本的組件.ADO 2.0加強了RDS方面的功能. 對RDSServer.DataFactory對象進行了改進以支持一層自定義的代碼,該代碼的目的是添加合法性驗證的能力和訪問權(quán)限控制.這個被叫做Handler的新模塊可以在執(zhí)行時對命令字符串和連接參數(shù)進行修改.一個Handler可以被一個初始化文件驅(qū)動并且通過添加如下的句子來調(diào)用:



Handler=progID,arg1,arg2,…, argn

在記錄集連接字符串中,需要用ProID來標(biāo)識Handler,它是執(zhí)行IdataFactoryHandler接口的COM服務(wù)器.

Microsoft提供了缺省的名為MSDFMAP.Handler的Handler,它是在msdfmap.ini文件中規(guī)定的.如果你自己想的話,你可以編寫自己的Handler(處理).下面是一段對msdfmap.ini文件的摘錄,你可以在你的Windows目錄下找到它:

<BLOCKQUOTE>

[connect AuthorDatabase]

Access=ReadOnly

Connect="DSN=MyLibraryInfo;UID=MyUserIDWD=MyPassword"

[userlist AuthorDatabase]

Administrator=ReadWrite

<FONT face=Verdana>[sql Au
7#
發(fā)表于 2021-10-16 08:54:25 | 只看該作者
學(xué)習(xí)學(xué)習(xí),好文章
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2024-10-23 06:25 , Processed in 0.123739 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表