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

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

2013-11-23 17:38:38  來源: Delphi編程 
    數據庫編程是Delphi最強大的優勢之一恐怕也很少有Delphi程序員沒有接觸過數據庫編程的Delphi獨特的DataAware構件讓很多初識Delphi的人為之目瞪口呆不需要寫任何代碼在幾分鐘之內就可以做出一個相當精巧的數據庫程序而且在開發期就可以看到運行期的結果這真是不可思議啊!但是Delphi強大無比的數據庫開發能力決不僅僅限於用幾個構件操縱一下DBF或是Access數據庫而已你所看到只是冰山一角讓我們仔細說來

    數據庫雖然家族龐大但一般來說可以分為兩種文件型數據庫和C/S型數據庫下面分別討論
    
    文件型數據庫
    所謂文件型數據庫顧名思義是基於文件的(filebased)數據被按照一定格式儲存在磁盤裡使用時由應用程序通過相應的驅動程序甚至直接對數據文件進行讀取也就是說這種數據庫的訪問方式是被動式的只要了解其文件格式任何程序都可以直接讀取這樣就使得它的安全性相當糟糕同時在蓬勃興起的網絡應用文件型數據庫更是難有用武之地效率低下不支持很多SQL命令不支持視圖觸發器存儲過程等高級功能等等這些特點決定了它不適合大型的工程

    最為大家所熟悉的文件型數據庫可能就是DBF(DBase/Foxbase/Foxpro)數據庫在DOS時代風靡一時相信很多人都有過抱著一本手冊苦背Foxbase命令的回憶吧!其特點是每個Table或Index都是一個獨立的文件使用相當簡單性能還可以安全性非常的差但應用非常廣泛(主要是DOS時代遺留下來的哪個單位沒有兩個用這種東東編出來的老古董程序呢?)它在今天還能占有一席之地其主要原因之一是正因為簡單和使用廣泛使得對它的訪問是最容易的甚至根本無需第三方的接口就可直接對其進行字節級的讀取

    除此之外還有著名的Access數據庫這是MS Office裡的構件之一和DBF數據庫不同所有的文件都被整合在一個mdb文件中這樣就避免了數據庫變大之後管理上帶來的麻煩同時它還提供密碼保護功能安全性比DBF數據庫要好很多Access數據庫除了一般的文本數據之外還擅長於對多媒體數據的處理在對聲音圖像乃至基於OLE的對象進行處理時令DBF數據庫望塵莫及隨著微軟戰略的步步勝利Access數據庫也不斷發展憑借著優秀的性能和與MS Office的無縫結合早已超越DBase系列成為現今最強大的文件型數據庫了

    Delphi中附帶的Paradox也是一種文件型數據庫它是Inprise公司自己的產品因此和Inprise的系列開發工具配合得很不錯它支持密碼保護支持標准的SQL性能也還不錯但是應用就不那麼廣泛了和DBF數據庫一樣它的每一個Table都是一個獨立的文件因此也有同樣的管理問題

    上文說到可以對文件型數據庫直接讀取但實際編程中很少有人這麼做因為再簡單的數據庫其實也是相當復雜的一步步分析它的格式從底層實現所有的數據庫應用如果都要程序員去寫的話可能會把人累死所以數據庫的開發商將這些訪問代碼封裝起來向程序員開放程序員只需要調用相應的接口就可以了

    以DBF為例使用DBase/Foxbase/Foxpro系列開發工具可以用它自己的語法開發出應用程序其中對DBF文件的具體操作被封裝了對於Access數據庫微軟公布了一個DAO(Database Access Object)由一系列的DLL文件組成封裝了對mdb文件的訪問使用VB的讀者可能對DAO比較熟悉只要在VB中嵌入DAO對象就可以非常方便地訪問Access數據庫了ODBC(Open DataBase Connection開放數據庫互連)也是一種封裝用意在於向開發人員提供一個統一的接口通過這個接口可以訪問任何支持ODBC的數據庫只要該數據庫提供了相應的ODBC驅動從這一點上來說ODBC是一種更加高級的封裝目前幾乎所有的主流的數據庫都能被ODBC所支持打開你的Windows的控制面板就可以看到ODBC的圖標

    用Delphi寫數據庫程序的人免不了要同BDE打交道BDE(Borland Dasebase  EngineBorland數據庫引擎)是一個和ODBC類似的東西orland/Inprise本來企圖用它來統一數據庫接口但後來Inprise在和微軟的戰爭中敗下陣來(ODBC是微軟搞出來的)它又不肯放棄BDE而是將其捆綁在lphi/C++Builder系列開發工具中結果好象變成這些開發工具的一種附屬品了

    用BDE開發數據庫程序相當容易許多Delphi教科書在寫到數據庫開發這一章時總是告訴你先在BDE中為某個DBF或Paradox數據庫設置一個別名然後往窗體上放一個TTable構件然後將其DatabaseName指向相應的別名……然後這個數據庫中某個表的內容就在相應的DataAware構件中顯示出來了但是它們具體是怎麼工作的呢?

    Delphi對數據庫進行訪問時事實上通過了很多層次的連接
   
    DataAware構件DataSource構件DataSet構件BDE數據庫
    
    從上面結構可以看出BDE負責與具體的數據庫打交道而Dataset構件與BDE相連DataSource構件與Dataset構件相連最後才連接到顯示具體數據的DataAware構件在Delphi的構件面板上Data Access頁面中的構件一般屬於DataSet構件例如TTableTQuery只要指定它們的DatabaseName屬性就可以將它們與某個數據庫建立連接在Data Control頁面中的構件一般是DataAware構件例如TDBGridTDBEditTDBImage它們的作用看上去與一般的Delphi構件相似不同之處在於可以通過一個DataSource構件作為中介與DataSet構件相連並自動顯示相應的數據

    用Delphi的數據庫構件建立一個應用程序是如此之方便但是如果深入下去會發現事情並不簡單你可以嘗試自己編寫代碼訪問數據庫中字段而不是通過DataAware構件由用戶來編輯如何做到這一點呢?秘密在於Field構件

    可以說Field構件是Delphi數據庫應用程序的基礎 當打開一個DataSet構件時相應的數據會被讀取並儲存在TTable或TQuery構件的Fields屬性中這個屬性被定義為Field數組通過直接訪問數組可以使用它們例如    
    TableFields[]AsInteger;    
    這段代碼訪問了Table中當前記錄的第一個字段該字段的類型為Integer
    也可以通過使用FieldbyName屬性來使用它們    
    TableFieldbyName(Last Name)AsString;

[]  []  


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