這段代碼訪問了Table
中當前記錄的名為Last Name的字段
該字段的類型為String
事實上
Data
Aware構件就是通過訪問DataSet構件的Fields屬性來使用數據的
弄明白了這一點之後
你自己也可以嘗試改寫一個常規的顯示構件
使之具有Data
Aware的性質
其實
大多數使用Delphi的數據庫高手並不喜歡使用Data
Aware構件
因為Data
Aware構件遠不用常規的構件來得靈活
DataSet構件除了Fields屬性之外
還具有數目眾多的特殊屬性
方法和事件
足以應付從小型文本數據庫到大型網絡數據庫的所有應用
本文不擬一一討論它們
如果讀者能將它們的運用爛熟於心的話
可以說應付數據庫編程就不會有多大問題了
請將注意力再次集中到上面的結構
在上面的結構的最後一環
可以看到BDE連接到了具體的數據庫
其實
在這一環中
也是有幾個層次的
理論上來說
BDE可以連接任何類型的數據庫
對於一些比較簡單的數據庫
例如ASCII(純文本型的數據庫)
dBase以及Delphi自己的Paradox
BDE可以直接訪問
另外它也可以通過一些相應的驅動
訪問特定的數據庫
例如通過DAO訪問Access數據庫
對於不能直接支持的數據庫
BDE還可以連接到ODBC
通過ODBC進行訪問
雖然這樣效率比較低
這種性質決定了BDE是一個相當龐大的東西
使用了BDE的Delphi程序
必須有BDE才能工作
所以必須同BDE一起發布
這樣往往造成這樣一種情況
只有幾百K的應用程序
在將整個BDE加入之後
體積將近
M!這對於以輕薄短小為長的文件型數據庫
簡直是一個致命的弱點
而且由於BDE要兼容太多的數據庫
本身也有不穩定的毛病
往往出現令人頭疼的問題
同時
通過安裝程序安裝BDE驅動和設置數據庫別名也是一件很麻煩的事情
這一切使得BDE在Delphi程序員中很不受歡迎
在網上的Delphi技術論壇裡
經常可以看到對BDE的一片咒罵之聲……那麼
有什麼辦法可以繞過BDE嗎?
有的
目前來說
至少有以下三種方法
() 使用第三方構件 Inprise自己也很早就意識到了BDE的問題
雖然他們不肯放棄BDE
但是從Delphi
起
仍然對程序員提供了一個不錯的選擇
創建自定義的DataSet構件
Delphi的開發者們把所有有關BDE的東西從TDataSet類中移走
放入了新的TBDEDataSet類(TBDEDataSet類是TDataSet類的子類)
TDataSet類被重新構造
其核心功能被虛擬化
因此
你只需要從TDataSet類派生一個自己的新類
並重載一些指定的虛擬方法(用以訪問具體的數據庫)
你就可以得到一個自己的DataSet構件
它與BDE完全無關
但可以象Delphi自己的DataSet構件一樣被使用
例如
訪問其Fields屬性
乃至與Delphi的Data
Aware構件一起工作!
於是出現了大量的第三方構件
它們可以訪問某種特定的數據庫
下面是一些比較常見的訪問文件型數據庫或ODBC的第三方構件
Diamond 支持的數據庫類型 Access
Halcyon 支持的數據庫類型 DBase/Foxpro
Apollo 支持的數據庫類型 DBase/Foxpro
mODBC 支持的數據庫類型 任何ODBC數據庫
ODBC Express 支持的數據庫類型 任何ODBC數據庫
這些控件被廣泛使用
在國內
就作者所知
財智家庭理財軟件使用了Diamond
而
追捕
(一個顯示指定IP的地址位置的共享軟件)使用了Halcyon
在使用這些第三方構件之後
軟件終於可以
輕裝上陣
再也不用為BDE頭疼了
() 使用ADO 在Delphi
中
Inprise終於提供了一個比較徹底的解決方法
那就是ADO構件
從原理上來說
ADO與上述的第三方構件並無多大區別
只是它是Inprise官方開發的
同時
它連接的不是某個具體的數據庫
而是微軟提供的ADO對象
ADO(ActiveX Data Object
ActiveX數據對象)是微軟提出的新標准
從理論上來
能夠支持任何類型的數據庫(甚至包括流式數據)
微軟力圖將它樹為新的統一數據庫接口
吹噓了它的許多優點
Inprise一直是微軟不共戴天的競爭對手
對微軟的標准嗤之以鼻(BDE即是一例)
但是由於種種原因
Inprise終於承認了ADO
平心而論
用ADO來取代BDE的確是一個不錯的解決方案
而且在Delphi中使用ADO也相當方便
從形勢看
ADO應該是未來的方向
但是
ADO本身也是相當大的
() 從最底層開發一個完整的數據庫引擎 這是最徹底的辦法
徹底拋棄Delphi的數據庫支持
從字節開始
開發自己的數據庫
這種方法有其好處
第一
不用考慮兼容性問題
例如不用去考慮用戶的數據庫文件是Access
格式還是Access
格式的
第二
可以在性能上達到最充分的優化
因為不需要通過任何通用接口
而是直接對磁盤文件進行操作
這對於一些對性能要求苛刻的程序是很有用的
第三
能夠最大限度地減少冗余代碼
因為這種數據庫往往是特定格式的
而且只需要執行一些特定的操作
訪問代碼當然要比通用數據庫精簡得多
但這種方法的負面問題也顯而易見
那就是龐大的工作量
再簡單的數據庫也是相當復雜的
從最底層實現一個完整的數據庫引擎
往往需要幾千行代碼
以及耐心和經驗
雖然聽起來有些極端
但這樣做的也不乏其人
著名的Foxmail就是使用了自定義的數據庫格式來儲存信件
地址本等有關信息
另一個共享軟件
電子書庫
也使用了自定義的
srm格式
作者開發的iCompanion(網絡伴侶)也是使用自定義格式來儲存網絡記錄的
限於篇幅
這裡就不再對具體的程序進行詳細的分析了
要補充的一點是
作者曾使用Diamond開發過Rich Explorer
這是一個專門用於浏覽著名的大富翁論壇的離線數據庫(Access格式)的閱讀器
在作者的主頁上
可以找到Rich Explorer的全部源代碼
它完整地展示了一個使用第三方構件訪問特定數據庫的程序(沒有使用Data
Aware控件)
代碼也比較簡單
適合於初學者分析
有心的讀者不妨作為參考
[] []
From:http://tw.wingwit.com/Article/program/Delphi/201311/24813.html