有很多種使用數據庫的方法,對大多數數據庫來說,選擇C++這種產品也許并不適宜。我們知道,像dBASE IV,FoxPro,Oracle和Access這樣的產品是完全以數據庫管理為中心的。事實上,這些產品非常善于創建數據庫管理器,以至于它們確實并不善于做太多其它的工作。即使要用更通用化而非更專用化的數據庫產品來執行一些類型的工作,在使程序設計更容易這一方面,像VisualBasic和Delphi這樣的RAD環境也要比Visual C++強很多。
你是不是對我的說法感到很奇怪?下面我就要談一談,在談到使用數據庫管理系統(DBMS)這個話題時,用Visual C++實際上可以做些什么。雖然上述其它語言使得編寫成熟的包括用戶界面和高速搜索能力的DBMS就像孩子做游戲一樣容易,但是,它們缺少Visual C++可以提供的某些重要東西。你不能為使用Access的數據庫輕松地編寫出實用程序。正像實用程序的定義所說的,實用程序應該很小并且具備可移植性——Access應用程序卻不是這樣。即使用Access這樣的產品創建的程序可以很小并且可以移植,你仍有其它方面的需求:底層的功能。
注:編寫數據庫實用程序及驅動程序時,可以選擇Visual C++語言。
想像一下,使用像Visual Basic這樣的語言來與實時數據采集設備打交道的情況。在進行底層訪問時,RAD的保護環境常常使程序員不能進行有效的處理。當然,數據采集設備幾乎不依賴于簡明的連接。你打算如何把Visual Basic和外部的數據源連接起來呢?數據源甚至可能不了解Windows,DOS或類似的成熟的操作系統。
只要使用得當,很容易看到Visual C++是一種不可或缺的數據庫管理工具。針對大規模的應用程序,即使你仍想依賴于Visual Basic這樣的RAD語言,也請考慮一下Visual C++,它創建的程序規模小、提供底層訪問并能提供實時訪問。事實上,你可能還沒有想到,Visual C++數據庫應用程序的市場是很有潛力的。隨著人們在旅途中越來越多地使用膝上型和掌上型電腦,這兩類電腦上的數據庫應用程序也變得越來越普通。你也許能夠適應今天的膝上型電腦上的Access應用程序,但談到硬盤大小或內存需求時,公司里較老的膝上型電腦可能就達不到要求。運行Windows CE的掌上型電腦在運行這個Access應用程序時,肯定會發生故障。在這一數據庫市場的新領域,Visual C++提供了無價無限的工具。
Web鏈接 談到使用Visual C++和數據庫,其實你并不孤單。從一開始就有數據庫專用新聞組提供有關數據庫創建技巧的幫助,比如microsoft.public.access。不過,這些新聞組提供的是通用信息,對實際編寫應用程序并非全都那么有用。專門針對Visual C++問題的新聞組是microsoft.public.vc.database和microsoft.public.vc.mfcdatabase。如果你決定用ODBC訪問數據庫,可能還要查看一下microsoft.public.odbc.sdk新聞組,它討論的不僅僅是SDK。對最新技術感興趣的程序員可以查閱microsoft.public.ado新聞組,或者microsoft.public.oledb(對象鏈接和嵌入數據庫)新聞組,前者討論 ADO,后者討論ADO的基礎技術。在microsoft.public.ado.rds有一個ADO子組,它討論遠程數據訪問。
既然所有的疑惑都消除了,大多數人的信心也就增強了,下面我們就介紹兩種使C++訪問數據庫中的數據的主要方法:ODBC(開放數據庫互連)和ADO(ActiveX數據對象)。在本章中,將介紹這兩種類型的訪問方法,但我想你會發現,ADO方法是針對新的程序設計情形而采用的。它克服了早期技術的諸多限制,依賴于Microsoft新的底層訪問方法OLE-DB(對象鏈接和嵌入數據庫)。在本書的后面我們會看到,用ADO和Visual C++提供的各種向導來匯集數據庫工程,其速度有多快。
注 ODBC通常用來訪問不具備OLE-DB特性的非Microsoft數據庫中的數據;16位的ODBC驅動程序工作起來可能非常緩慢。
ODBC素以最慢的數據訪問方法而著稱,但是很可惜,當ADO或DAO都不支持某個數據庫管理器而ODBC支持這個數據庫管理器時,在這種特定的情形下,你仍然需要使用ODBC。在大多數情況下,這意味著要從數據庫廠商那里獲得所需的驅動程序,雖然Visual C++確實附帶了一些產品的驅動程序(如果你正在使用數據庫管理器的某些神秘功能,那么就需要建立自己的接口棗這并不是一件十分困難的事)。本質上講,你總是要使用ODBC來訪問Microsoft產品之外的其它DBMS產品所創建的數據庫,這些數據庫并不具備OLE-DB功能。ODBC還要求做一些額外的工作棗為ADO調整Visual C++中的大部分向導。
高級技巧
除了使用ADO和ODBC外,你還可以使用像DAO(數據訪問對象)這樣的早期技術,該技術包含在像Access這樣的Microsoft產品中。DAO依賴于用Microsoft Access自動獲得的Microsoft Jet數據庫引擎。DAO還是較早版的Visual Basic所使用的引擎(最新版的Visual Basic和Visual C++依賴于相同的ADO/OLE-DB組合),所以如果需要支持較早的Visual Basic應用程序,那么DAO仍是一個不錯的選擇。
盡管Microsoft文件聲明,可以用DAO訪問非Microsoft產品建立的數據庫,但你仍會發現,在這種情況下,使用ADO和ODBC要好得多。這樣的話,不但兼容性問題會少一些,速度也將有所提高,因為數據請求經過的接口層減少了。有一條經驗要記住,DAO是設計用來處理MDB文件的。
ADO的一個問題是,它不支持遠程通信。這是Microsoft提出RDO(遠程數據對象)的原因之一。這種特別技術在Visual Basic應用程序中的使用,要比在Visual C++中的使用多得多,所以我猜想,你們中有很多人都在使用它。但是,記住RDO仍是一種生命力很強的技術,這一點很重要。ADO確實具有替代RDO的遠程數據服務(RDS)特征。換言之,ADO在一個軟件包中提供了DAO和RDO兩種功能性。