熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

關於Delph連接數據庫原理[2]

2022-06-13   來源: Delphi編程 
    這段代碼訪問了Table中當前記錄的名為Last Name的字段該字段的類型為String

    事實上DataAware構件就是通過訪問DataSet構件的Fields屬性來使用數據的弄明白了這一點之後你自己也可以嘗試改寫一個常規的顯示構件使之具有DataAware的性質其實大多數使用Delphi的數據庫高手並不喜歡使用DataAware構件因為DataAware構件遠不用常規的構件來得靈活DataSet構件除了Fields屬性之外還具有數目眾多的特殊屬性方法和事件足以應付從小型文本數據庫到大型網絡數據庫的所有應用本文不擬一一討論它們如果讀者能將它們的運用爛熟於心的話可以說應付數據庫編程就不會有多大問題了

    請將注意力再次集中到上面的結構在上面的結構的最後一環可以看到BDE連接到了具體的數據庫其實在這一環中也是有幾個層次的理論上來說BDE可以連接任何類型的數據庫對於一些比較簡單的數據庫例如ASCII(純文本型的數據庫)dBase以及Delphi自己的ParadoxBDE可以直接訪問另外它也可以通過一些相應的驅動訪問特定的數據庫例如通過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的DataAware構件一起工作!

    於是出現了大量的第三方構件它們可以訪問某種特定的數據庫下面是一些比較常見的訪問文件型數據庫或ODBC的第三方構件          
     Diamond 支持的數據庫類型 Access
     Halcyon 支持的數據庫類型 DBase/Foxpro
     Apollo 支持的數據庫類型 DBase/Foxpro
     mODBC 支持的數據庫類型 任何ODBC數據庫
     ODBC Express 支持的數據庫類型 任何ODBC數據庫 
    
    這些控件被廣泛使用在國內就作者所知財智家庭理財軟件使用了Diamond追捕(一個顯示指定IP的地址位置的共享軟件)使用了Halcyon在使用這些第三方構件之後軟件終於可以輕裝上陣再也不用為BDE頭疼了

    () 使用ADO
    在DelphiInprise終於提供了一個比較徹底的解決方法那就是ADO構件從原理上來說ADO與上述的第三方構件並無多大區別只是它是Inprise官方開發的同時它連接的不是某個具體的數據庫而是微軟提供的ADO對象
    ADO(ActiveX Data ObjectActiveX數據對象)是微軟提出的新標准從理論上來能夠支持任何類型的數據庫(甚至包括流式數據)微軟力圖將它樹為新的統一數據庫接口吹噓了它的許多優點Inprise一直是微軟不共戴天的競爭對手對微軟的標准嗤之以鼻(BDE即是一例)但是由於種種原因Inprise終於承認了ADO平心而論用ADO來取代BDE的確是一個不錯的解決方案而且在Delphi中使用ADO也相當方便從形勢看ADO應該是未來的方向但是ADO本身也是相當大的

    () 從最底層開發一個完整的數據庫引擎
    這是最徹底的辦法徹底拋棄Delphi的數據庫支持從字節開始開發自己的數據庫這種方法有其好處第一不用考慮兼容性問題例如不用去考慮用戶的數據庫文件是Access 格式還是Access 格式的第二可以在性能上達到最充分的優化因為不需要通過任何通用接口而是直接對磁盤文件進行操作這對於一些對性能要求苛刻的程序是很有用的第三能夠最大限度地減少冗余代碼因為這種數據庫往往是特定格式的而且只需要執行一些特定的操作訪問代碼當然要比通用數據庫精簡得多但這種方法的負面問題也顯而易見那就是龐大的工作量再簡單的數據庫也是相當復雜的從最底層實現一個完整的數據庫引擎往往需要幾千行代碼以及耐心和經驗

    雖然聽起來有些極端但這樣做的也不乏其人著名的Foxmail就是使用了自定義的數據庫格式來儲存信件地址本等有關信息另一個共享軟件電子書庫也使用了自定義的srm格式作者開發的iCompanion(網絡伴侶)也是使用自定義格式來儲存網絡記錄的

    限於篇幅這裡就不再對具體的程序進行詳細的分析了要補充的一點是作者曾使用Diamond開發過Rich Explorer這是一個專門用於浏覽著名的大富翁論壇的離線數據庫(Access格式)的閱讀器在作者的主頁上可以找到Rich Explorer的全部源代碼它完整地展示了一個使用第三方構件訪問特定數據庫的程序(沒有使用DataAware控件)代碼也比較簡單適合於初學者分析有心的讀者不妨作為參考

     

[]  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/24813.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.