複製鏈接
請複製以下鏈接發送給好友

遠程數據對象

鎖定
遠程數據對象 是微軟的一個應用程序接口,讓寫Windows應用程序的程序師能夠進入微軟和其他的數據庫供給者的數據庫。然後,程序中 RDO 陳述使用微軟的底層數據存取對象 (DAO) 來實際進入數據庫。 數據庫供給者寫入 DAO接口。 RDO 已經發展到微軟為新的程序推薦的程序接口--- ActiveX 數據對象。 ADO也提供進入非關係數據庫的接口而且比較容易使用。
中文名
遠程數據對象
外文名
Remote Data Objects
簡    寫
RDO
性    質
微軟的一個應用程序接口
關鍵詞
遠程數據對象

遠程數據對象簡介

遠程數據對象 RDO(RemoteDataObjects)是一個到 ODBC 的、面向對象的數據訪問接口,它同易於使用的 DAO style組合在一起,提供了一個接口,形式上展示出所有 ODBC 的底層功能和靈活性。儘管 RDO 在很好地訪問 Jet 或 ISAM 數據庫方面受到限制,而且它只能通過現存的 ODBC 驅動程序來訪問關係數據庫。但是,RDO 已被證明是許多 SQL Server、Oracle 以及其他大型關係數據庫開發者經常選用的最佳接口。RDO 提供了用來訪問存儲過程和複雜結果集的更多和更復雜的對象、屬性,以及方法。
RDO(Remote Data Objects)處理一組對象以完成遠程資料的存取,它是在ODBC API和驅動程序之上的一個可程序的薄層(thin code layer),用以建立資料結果集(result set)和光標,以及用最小的工作站資源執行復雜的程序。
注意RDO祇能在32位的操作系統上執行(如Windows95或NT)
主題
l RDO的特性 介紹RDO的重要特性
l 以RDO寫程序 介紹RDO對象模型
l 和Jet/DAO之間的比較 RDO的特性如何與DAO對應
l 初始化rdoEngine對象 rdoEngine對象的概觀與如何去設定它的屬性
l 建立rdoEnvironment對象 rdoEnvironment對象的概觀以及如何應用它的屬性來做數據存取
l 使用RDO來執行查詢 如何建立以及執行有參數的查詢
l 使用RDO來執行stored procedure 介紹如何與有特殊需求的store procedure一起運作
l 建立RDO光標 介紹如何建立RDO光標
l 使用RDO結果集 介紹如何使用從查詢傳回的資料以及參數
l 使用ODBC API函數 介紹RDO支持的ODBC handles
l 使用RemoteData控件(control) 如何用RemoteData控件處理數據
RDO的特性和客户端/伺服端的設計目標
使用RDO時,程序可以直接存取ODBC的資料源而不需要本地端的查詢處理。這會在存取遠程的數據庫引擎時大大地提高效率和彈性。
使用RDO可以得到下列的好處。特別是在客户端/伺服端架構
l 提高自遠程ODBC資料源存取資料的效率。
l 建立簡單而無光標的結果集,或是較為複雜的光標。
l 執行查詢以及同時運作多結果集:經由一個單一的查詢可以傳回多個結果集,這可以提高查詢處理器和系統資源的使用效率。例如可以使用一個查詢來提供多個顯示資料對象的資料(如data-driven的list box)或查詢一起運作,可以正確的設定scroll bar和progress status bars。
l 以單一批次(batch)執行多個action查詢:在很多狀況下可能是以單一的SQL述句來執行多個新增(INSERT)、刪除(DELETE)和修改(UPDATE)的動作,這可以減少網絡和遠程處理的負載,同時讓處理交易(transaction)更方便。
l 可以使用參數輸入stored procedure,以及傳回結果:從stored procedure輸出參數是從Oricle的stored procedure上獲得運算結果的唯一來源。這會在單一查詢以及許多管理的運作上有用。在很多狀況下,必須藉由stored procedure傳回的結果來判斷所執行的運作是否成功。RDO經由rdoParameter對象來處理這些輸入、輸出的參數。
l 限制處理以及傳回的記錄數:在某些狀況下,使用者所選的記錄數目可能超過實際運作的量,RDO可以設定經查詢傳回的記錄數目量。以這種方式可以預測響應時間,也更容易管理工作站和服務器的資源。以同樣的機制可以限制修改查詢(data-modification query)所能影響記錄數的量。
l 利用伺服端光標:一些伺服端數據庫引擎也提供了光標的運作,在某些狀況下使用伺服端光標可以減輕網絡負荷以及工作站的資源以提升效率。
l 監控遠程資料源所產生的訊息或錯誤但不妨礙正在執行的查詢。
l 執行異步查詢:能夠使用同步、異步事件驅動(event-driven)異步等處理,使程序不會在執行大量查詢時停滯。且不需要使用Polling機制。在異步查詢期間,Connection會一直保留着。
l 在初始設定的查詢截止時間到時,仍可繼續:當查詢的運作時間超過QueryTimeout屬性時,RDO允許繼續另一個查詢等待時間,而不直接停止查詢。
l 提供改良的多形(polymorphism)和“free-standing”的對象產生方式:RDO支持以DIM宣告且產生對象的方式,這種free-standing的對象可以被連結到其它的對象以執行運作。例如,可以獨立的產生rdoQuery和rdoConnection對象,而後聯合在一起運作。
l 提供分離的結果集:RDO允許產生靜態的讀寫光標而後中斷與遠方服務器的連結。在rdoResultset對象中的資料仍可存取,一但以另一個rdoConnection對象再連結上遠程伺服機時,可以以BatchUpdate方法以完成這種離線(offline)的改變。
l 產生和管理開放式的批次更新:當ODBC光標鏈接庫提供開放式更新時,它是以一筆接着一筆的方式而非批次更新。這種做法需要較多的網絡和服務器的頻寬。RDO提供新的客户端批次(Client Batch)光標,將一羣被新增,修改和刪除的記錄集合起來。這種方式祇需要與伺服端連結一次,因此可以提升效率
l 讓Stored Procedures使用更容易:RDO允許將可輸入參數的查詢和stored procedure當成rdoConnection對象的方法。可以像使用VB函數傳入參數的方式一樣傳入參數而不需要rdoParameter對象。
l 提供之下的ODBC handles:當需要更直接,更有彈性的資料存取時,RDO提供直接存取ODBC環境(environment),connection和statement 等handles。
l 減少內存使用
相關圖片 相關圖片
以RDO寫作程序【2】
RDO對象和集合提供了寫作程序和維護遠程ODBC資料的的架構。對象和集合有描述數據庫特性的屬性和操作數據庫的方法。使用這種包含子對象的架構可以建構出對象與對象或對象與集合等等的關係,而這些關係表現了數據庫系統的邏輯結構。
除了rdoEngine對象外,其餘所有的對象都是由相關的集合在維護。當RDO在第一次存取而被初始化時,會自動產生rdoEngine對象以及內含的rdoEnvironments(0)對象。
RDO的程序寫作結構與DAO相似,但更注重在stored procedure的操作和傳回的資料集,相對的對ISAM資料的存取則較不重視。
下表為各對象的簡介
RDO對象 描述 rdoEngine 最基礎的對象,當第一次存取RDO對象時會自動產生。 rdoError 處理ODBC錯誤以及RDO所產生的訊息。也是自動產生的。 rdoEnvironment 對不同使用者定義邏輯上的connections和transaction的範圍,包含被開啓的或未開啓但擁有的connections,提供仿真transaction的機制,提供一個security context來執行data manipulation language(DML)。rdoEnvironment(0)會自動產生。 rdoConnection 代表一個連到遠程資料來源的開啓的connection,或是一個擁有但未開啓的對象,該對象可以在稍後開啓。 rdoTable 代表一個儲存着的基本資料表(base table)的定義或是一個view rdoResultset 代表執行一個查詢後所傳回的記錄 rdoColumn 代表擁有一般的資料型態以及屬性的一個數據域位 rdoQuery 一個可以擁有參數的SQL查詢 rdoParameter 代表輸出入的參數,關聯於rdoQuery對象
RDO對象
描述
rdoEngine
最基礎的對象,當第一次存取RDO對象時會自動產生。
rdoError
處理ODBC錯誤以及RDO所產生的訊息。也是自動產生的。
rdoEnvironment
對不同使用者定義邏輯上的connections和transaction的範圍,包含被開啓的或未開啓但擁有的connections,提供仿真transaction的機制,提供一個security context來執行data manipulation language(DML)。rdoEnvironment(0)會自動產生。
rdoConnection
代表一個連到遠程資料來源的開啓的connection,或是一個擁有但未開啓的對象,該對象可以在稍後開啓。
rdoTable
代表一個儲存着的基本資料表(base table)的定義或是一個view
rdoResultset
代表執行一個查詢後所傳回的記錄
rdoColumn
代表擁有一般的資料型態以及屬性的一個數據域位
rdoQuery
一個可以擁有參數的SQL查詢
rdoParameter
代表輸出入的參數,關聯於rdoQuery對象
注意:要支持分佈式交易(distributed transaction)需要搭配SQL Server6.5版以及Distributed Transction Coordinator。
注意:RDO 1.0版提供的rdoPreparedStatement對象和rdoPreparedStatements集合,在RDO 2.0版仍然支持,但是是為了向前兼容,所以在RDO 2.0版後最好改用rdoQuery對象和rdoQueries集合。
產生遠程資料對象
RDO對象可以經由父對象產生或經由Dim述句。如果是經由Dim as New述句產生的RDO對象不會被加入到相關的集合中。下表列出如何產生主要的RDO對象
1.1產生遠程資料對象
RDO對象
產生方式
rdoEngine
自動產生
rdoEnvironment
第一個instance自動產生 rdoEngine.rdoCreateEnvironment
rdoConnection
rdoEnvironment(x).OpenConnection(也可以用RemoteData控件產生) Dim MyCn as New rdoConnection
rdoQuery
rdoConnections(x).CreateQuery Dim MyQry as New rdoQuery
rdoResultset
rdoQuery(x).OpenResultset rdoConnection(x).OpenResultset
rdoParameter
會為有參數的查詢自動產生
rdoTable
當被參照時自動產生
rdoError
當ODBC錯誤發生或有訊息時自動產生

遠程數據對象RDO與Jet、DAO的比較

雖然RDO與DAO大致相似,但RDO是專門操作關係型數據庫的對象,且沒有自己的查詢處理(processor),它完全靠資料來源處理查詢併產生結果集 以下是RDO與DAO/Jet 的比較表 RDO對象 相對的DAO/Jet對象 rdoEngine DBEngine DBEngeine rdoError Error Error rdoEnvironment Workspace Workspace rdoConnection Database Connection rdoTable TableDef 不支持 不支持 索引 不支持 rdoResultset Recordset Recordset 不支持 Table-type 不支持 Keyset-type Dynaset-type Dynaset-type Static-type(r/w) Snapshot-type(r/o) Snapshot-type(r/o) Dynamic-type 不支持 Dynamic-type Forward-only-type Forward-only-type Forward-only-type (cursorless) 不支持 (cursorless) rdoColumn Field Field rdoQuery QueryDef QueryDef rdoParameter Parameter Parameter 不支持 Relation 不支持 不支持 Group 不支持 不支持 User 不支持 一些DAO的對象、方法、和屬性是設計來操作ISAM架構下的Jet數據庫。例如可以利用索引(Index)對象和Seek方法來處理ISAM的索引以及找尋記錄。但是因為RDO所使用的後端數據庫處理索引的方式完全不同,所以RDO並不需要去支持這些索引的運作。 DAO也支持建造和修改數據庫架構(schema),參照的完整性以及安全上的維護。這些對RDO來説都是後端數據庫服務器在維護的,所以本身並不提供相關的對象或方法。 但仍然可以利用RDO的make-table查詢;以標準的SQL述句來執行動作查詢(action queries)以產生、修改或刪除數據庫和資料表。同時也可以以複雜的stored procedures還處理數據庫的架構和執行為或的工作,這些是DAO做不到的。
RDO對象
相對的DAO/Jet對象
-
rdoEngine
DBEngine
DBEngeine
rdoError
Error
Error
rdoEnvironment
Workspace
Workspace
rdoConnection
Database
Connection
rdoTable
TableDef
不支持
不支持
索引
不支持
rdoResultset
Recordset
Recordset
不支持
Table-type
不支持
Keyset-type
Dynaset-type
Dynaset-type
Static-type(r/w)
Snapshot-type(r/o)
Snapshot-type(r/o)
Dynamic-type
不支持
Dynamic-type
Forward-only-type
Forward-only-type
Forward-only-type
(cursorless)
不支持
(cursorless)
rdoColumn
Field
Field
rdoQuery
QueryDef
QueryDef
rdoParameter
Parameter
Parameter
不支持
Relation
不支持
不支持
Group
不支持
不支持
User
不支持
2.1RDO的集合管理
RDO集合
説明
rdoErrors
內含所有RDO一次運作後所產生的rdoError對象。
rdoEnvironments
內含rdoEngien之下,所有運作中(active)的rdoEnvironment對象,rdoEnvironments(0)會被自動產生。
rdoConnections
內含所有在rdoEnvironment對象下開啓的rdoConnection對象,或是以Add方法加入的rdoConnection對象。
rdoTables
內含所有在數據庫中預存的rdoTable對象。
rdoResultsets
內含所有在rdoConnection中開啓的rdoResultset對象。
rdoColumns
內含所有在rdoResultset或rdoTable對象中的rdoColumn對象。
rdoQueries
內含所有以rdoConnection對象的CreateQuery函式而自動加入的,或以Add函式加入。
rdoParameters
內含所有經由解析成功的SQL述句所產生的rdoParameter對象。

遠程數據對象初始化rdoEngine對象

rdoEngine對象是所有RDO對象的最上層對象。它不能被重複產生,以及使用集合來包含。它可以讓好幾個應用程序共享,但會為每一個參與共享的應用程序產生私有資料區,而不會讓應用程序彼此之間互相干擾。
3.1初始化rdoEngine的內定值
屬性
定義
內定值
rdoDefaultCursorDriver
光標鏈接庫(ODBC、客户端批次、伺服端光標,或是沒有)
rdUseIfNeeded(伺服端光標)
rdoDefaultPassword
使用者密碼
“”(空字符串)
rdoDefaultUser
使用者賬號
“”(空字符串)
rdoDefaultErrorThreshold
發生多嚴重的錯誤才停止
-1(不致能disabled)
rdoDefaultLoginTimeout
建立connection等多久沒響應,才放棄
15秒
做啥。 例如執行了一個統計的查詢後,這個訊息會經由rdoErrors集合傳回,而應用程序可以經由InfoMessage事件的觸發而知道。
3.2處理RDO的錯誤和訊息

遠程數據對象產生rdoEnvironment對象

在大部分的狀況下並不需要產生額外的rdoEnvironment對象,內定的rdoEnvironments(0)應該夠用。但若應用程序需要更多的交易處理,或不同的賬號密碼環境,那就需要以rdoCreateEnvironment方法給予不同的使用者名稱、密碼來產生另外一個rdoEnvironment對象。這時要給予一個唯一的rdoEnvironment名稱,若與已經產生的相同,則會有可捕捉的錯誤。 內定的rdoEnvironments(0)的名稱為”Default_Environment”,使用者名稱及密碼都是空字符串。 若提供了唯一的名子,新產生的rdoEnvironment對象會自動加入rdoEnvironments集合。反之,若以空字符串當name參數的值,則新產生的對象不會加入。 快取(cached)登入信息 若在使用OpenConnection方法時,沒有在connect參數設定使用者賬號密碼,或是使用RemoteData控件,但未在Connect內指定,則RDO會用rdoEnvrionment的賬號密碼建立連結。如下例,會用使用者賬號(Fred)和密碼(Blond)在rdoEnvironment對象En內建立連結 Dim En As rdoEnvironment Set En = rdoCreateEnvironment(“”,”Fred”,”Blond”)
4.1使用rdoEnvironment對象管理交易(Transaction)
注意:交易模型並不支持巢狀交易(nested transaction),所以不能在前一個BeginTrans還未與CommitTrans或RollbackTrans成對之前再使用一個BeginTrans方法。但若ODBC的資料源本身如SQL Server支持巢狀交易,則可以透過SQL述句,叫伺服端進行巢狀交易。 當使用ODBC交易時,一個開啓的連結並不會影響另一個連結,即使這兩個連結是連到同一個數據庫的同一個資料表。 捕捉rdoEnvironment交易事件 當rdoEnvironment完成一筆交易後會引發一個事件,可以利用這個事件來管理其它的交易。
4.2在rdoEnvironment對象管理Connections
密碼保護的環境。在這個環境下可以開啓多條連結與管理多個ODBC交易。 l l 使用OpenConnection方法在rdoEnvironment之內建立一個以上的連結 l l 在rdoEnvironment內使用BeginTrans,CommitTrans和RollbackTrans方法來管理ODBC交易。 l l 使用多個rdoEnvironment對象來建立多個、同時、獨立和重疊的交易。 l l 使用Dim X As New rdoConnection來產生一個獨立(stand-alone)rdoConnection對象,接着使用Add方法加入到rdoEnvironment對象內的rdoConnections集合。 l l 使用Remove方法將特定的rdoConneciton對象從他的父集合rdoConnections中移除。 l l 使用Close方法來結束環境和連結注意:rdoConnection對象不一定要屬於某個rdoEnvironment,它可以獨立產生。

遠程數據對象建立RDO連結

在參照一個遠程數據庫內的資料之前,要先建立一條連結到資料源。這個資料源可以是遠程的數據庫服務器,像MS SQL Server或Oracle,或其它支持適合的ODBC驅動程序的數據庫。 RDO建立連結有好幾種方法,與DAO不同的是,它並不為應用程序管理這些連結;僅僅收集要傳給SQLDriverConnect函數的參數,和使用SQLDisconnect函數來關掉連結。RDO並不快取這些資料以分享給使用相同DSN來建立連結的後來者。當使用RDO的Close方法來關掉連結時,它立刻就會被關掉。 可以以下的方法開啓連結 l l 使用RemoteData控件自己的Connection屬性來建立連結對象rdoConnection l l 宣告一個rdoConnection對象,再以rdoEnvironment對象的OpenConnection方法開啓後賦予 l l 用Dim 變量名 As New語法產生一個獨立的rdoConnction,設定它的屬性後再以EstablishConneciton方法建立連結 l l 無論在獨立的rdoConnection或是使用過Close方法的rdoConnection都可以用EstablishConnection方法建立連結 在不同的情況下,可以選擇不同的方法。例如要對一些遠程數據庫完成象,再透過rdoQuery對象的ActiveConnection屬性將rdoConnection對象設定(Assign)給這些rdoQuery。在大部分狀況下,RemoteData控件建立連結較為簡單。 以上的這些方法都是要與資料源如SQL Server,或Oracle;建立一個實體的連結(link)。要建立這個連結需要提供資料源的網絡位置、驅動程序型態以及一些用來確認使用者身份的選擇性參數。 一但建立了連結,可以用它來 l l 使用OpenResult方法來執行一個查詢以傳回一或多個結果集。 l l 使用Execute方法以執行一個動作查詢(action query) l l 產生一個rdoQuery對象,好接着執行參數查詢或預存程序。 l l 定義執行一個以上預存程序的查詢來當成rdoConnection的方法。 l l 利用rdoResultset對象的ActiveConnection屬性連結rdoConnection對象 l l 使用Add方法將rdoConnection加到rdoConnections集合 l l 使用Remove方法將rdoConnection從rdoConnections集合移除
5.1提供RDO的連結字符串(ConnectionStrings)
ODBC聯機字符串參數
參數定義
DSN=
註冊ODBC資料來源名稱(Data Source Name DSN),如果用了驅動程序參數,則DSN就不要用。
UID=
在伺服端建立的使用者賬號,以SQL Server來説就是登入的賬號
PWD=
對應登入賬號的密碼。
DATABASE=
需要的內定數據庫(選項)。
SERVER=
資料來源服務器的網絡計算機名稱,若操作系統為MS Windows NT,且數據庫服務器在本機,則網絡計算機名稱可用(local)。
DRIVER=
資料來源的服務器驅動程序名稱,以MS SQL Server為例,這裏用的是{SQL Server}。若使用了DRIVER參數,就不需要使用DSN。
APP=
應用程序的名稱(選項)。
WSID=
工作站ID,通常是應用程序所在工作站的網絡名稱。(選項)。
LANGUAGE=
SQL Server所使用的國家語言。
注意:
選項
內定行為
Network Address
以服務器網絡名稱代替,所以不需要。
Network Protocol
若是MS SQL Server,內定是Names Pipes。
OEMTOANSI switch
內定是“Off”。
使用Trusted Connection Option
內定是“Off”。
為Prepared Statement產生預存程序
內定是“Off”。
安全漏洞。可以改成應用程序直接以某幾種的賬號密碼登入。若要搭配NT網絡系統的DOMAIN安全管理,則上述兩個方法的連結字符串內的UID和PWD要保持空白。寫法如下 Conn$=”DSN=MyRemote;UID=;PWD=;” 設定內定的數據庫 若rdoConnection對象在建立之初,未設定DATABASE參數,則內定使用的數據庫可能是註冊的DSN內定義的數據庫;或是伺服端系統管理員定義的數據庫。但內定的數據庫可以藉由執行Transaction SQL的“USE予以更改。範例如下 cn.Execute “USE Pubs” 傳遞連結字符串給RDO或RemoteData控件 可以以下列方式傳遞連結字符串給RDO或RemoteData控件 l l 執行OpenDatabase方法時,設定Connect參數。 l l 設定RemoteData控件的Connect屬性。 l l 當rdoConnection使用EstablishConnection方法時,設定Connect屬性 若使用RemoteData控件,則有一些屬性都與連結有關,但如果Connect屬性內有設,其它相關的屬性也有設定的下,Connect內的屬性會蓋過其它的屬性。
5.2使用已經註冊好的DSN
sa;PWD=;''
5.3產生不用DSN的RDO連結
5.4設定rdoConnection選項
rdoConnection屬性
內定值
設定
LoginTimeout
15
在放棄建立連結前要等多少秒
CursorDriver
rdUseIfNeeded
使用該rdoConnection對象的查詢將會用的光標形式
Connect
“”
用來產生連結的ODBC參數—連結字符串
Name
“”
連結時用的ODBC DSN
5.5使用rdoConnection對象的事件(Event)
rdoConnection事件
何時觸發
BeforeConnect
在呼叫ODBC SQLDriverConnect函數之前
Connect
在建立連結運作完成後—不一定成功或失敗
Disconnect
在連結被斷掉時(disconnect)
QueryComplete
在異步(asychronous)查詢結束時
QueryTimeout
在查詢所使用的時間超過rdoConneciton對象的QueryTimeout屬性。
WillExecute
在RDO準備執行一個查詢時。
時間間隔用完或查詢結束。若輸入True,則直接停掉該執行中的查詢。注意:當查詢查詢被激活時,QueryTimeout屬性就已經傳給ODBC驅動程序,所以若之後才改變這項屬性將對已經被產生的查詢沒有作用。 使用WillExecute事件處理 這個事件會在執行任何查詢前先發生,而不管是action或row-returning查詢。可以藉由捕捉這個事件做執行查詢前的最後修正工作項查詢而RDO會產生可捕捉的錯誤。這個事件可以用來過濾某些查詢是否可以執行。 程序範例如下 Option Explicit Dim WithEvents cn As rdoConnection Dim rs As rdoResultset Dim SQL As String Dim col As rdoColumn Public Qd As rdoQuery Dim dTime As Date Private Sub cn_Connect(ByVal ErrorOccurred As Boolean) If Not ErrorOccurred Then MsgBox "連結建立完成" Else Dim er As rdoError Debug.Print Err, Error$ For Each er In rdoErrors Debug.Print er.Description, er.Number Next End If End Sub Private Sub cn_QueryComplete(ByVal Query As RDO.rdoQuery, ByVal ErrorOccurred As Boolean) If Not ErrorOccurred Then MsgBox Str(Second(Now - dTime)) Debug.Print Qd(0) Else Dim er As rdoError Debug.Print Err, Error$ For Each er In rdoErrors Debug.Print er.Description, er.Number Next End If End Sub Private Sub cn_QueryTimeout( _ ByVal Query As RDO.rdoQuery, Cancel As Boolean) Dim ans As Integer ans = MsgBox("Query Timed out... Press Retry to continue waiting", _ vbRetryCancel + vbCritical, "Query Took Too Long") If ans = vbRetry Then Cancel = False Else Cancel = True End If End Sub Private Sub RunQuery_Click() On Error GoTo RunQueryEH Qd.QueryTimeout = 5 Set rs = Qd.OpenResultset(rdOpenKeyset, _ rdConcurReadOnly) Exit Sub RunQueryEH: Dim er As rdoError Debug.Print Err, Error$ For Each er In rdoErrors Debug.Print er.Description, er.Number Next rdoErrors.Clear Resume Next End Sub Private Sub cn_WillExecute(ByVal Query As RDO.rdoQuery, Cancel As Boolean) dTime = Now End Sub Private Sub Form_Load() Set cn = New rdoConnection With cn .Connect = "uid=sa;pwd=;database=Pubs;dsn=Public;" .CursorDriver = rdUseClientBatch .EstablishConnection Prompt:=rdDriverNoPrompt, ReadOnly:=True, Options:=rdAsyncEnable .QueryTimeout = 5 End With Set Qd = cn.CreateQuery("LongQuery", "") With Qd .SQL = "{?=call pubs.dbo.VeryLongProcedure}" .rdoParameters(0).Direction = rdParamReturnValue End With End Sub
5.6異步地開啓連結
5.7使用獨立的(stand-alone)rdoConnection對象
5.8使用rdoConnection對象
數據庫結構(schema),或執行管理的動作(administrative function) l l 執行預存程序來管理結果集、輸出的參數或return values l l 使用rdoConnection的Close方法以停止到資料源的連結,同時釋放所使用的資源。
5.9與RDO資料源連結失敗
5.10使用rdoTable對象
5.11關掉不需要的RDO連結

遠程數據對象使用RDO來送出查詢

通常應用程序需要利用查詢來完成對遠程數據庫資料、使用者權限或數據庫伺服程序運作的管理。而查詢可分為以下兩部分 l l 送出一個內含SQL述句描述所需結果集的查詢,或參照一個預存程序 l l 處理結果記錄,參數和傳回值(預存程序回傳的部分) 在送出一個查詢前,需要問以下的問題以確認查詢的目的與效率 l l 應用程序是否需要瀏覽資料記錄?若需要瀏覽,則是雙向的還是祇向前瀏覽? l l 是否需要更新資料?如果需要,是否可以運作查詢直接更改?使用者是否需要權限來修改? l l 有多少使用者會在同時,運作同樣的資料?可否控制這些同時執行的應用程序?這些應用程序是否共享資料? l l 查詢將會傳回多少筆資料?應用程序端的系統是否有能力存放這些記錄?網絡使否在傳這些記錄時有頻寬的瓶頸? l l 記錄是以何種格式傳回—書籤還是靜態資料? l l 查詢是否要傳參數? l l 這個查詢在應用程序運作時會常常被執行,還是僅有一兩次? 管理RDO查詢 當開啓一條連結時,可以在其上執行許多查詢,可以參考下述原則使用不同形式的查詢 l l 若查詢僅僅使用一次,可以用rdoConnection對象的OpenResultset或Execute方法來產生rdoResultset對象,還是直接執行動作查詢。這兩種選項最後都會經由執行ODBC API的SQLExecDirect函式完成查詢,所以可以在使用OpenResultset或Execute方法時,直接在Options參數輸入rdExecDirect以直接指定SQLExecDirect函式。 l l 若執行的查詢可能會使用一次以上同時要輸入參數,則可以CreateQuery方法產生rdoQuery對象。該對象允許多次使用,且在使用時輸入不同的參數。一但使用rdoQuery對象,則可以透過這個對象的OpenResultset或Execute方法來產生rdoResultset對象,或是直接執行動作查詢。若要改變輸入的參數,則可以經由改變rdoParameter對象辦到。這種做法會經由ODBC API的SQLPrepare和SQLExecute函式。
6.1產生rdoResultset對象
6.2使用OpenResultset方法
注意:
6.3編寫SQL述句 [1] 
參考資料