數據庫編程是Delphi最強大的優勢之一
恐怕也很少有Delphi程序員沒有接觸過數據庫編程的
Delphi獨特的Data
Aware構件
讓很多初識Delphi的人為之目瞪口呆
不需要寫任何代碼
在幾分鐘之內就可以做出一個相當精巧的數據庫程序
而且在開發期就可以看到運行期的結果
這真是不可思議啊!但是
Delphi強大無比的數據庫開發能力
決不僅僅限於用幾個構件操縱一下DBF或是Access數據庫而已
你所看到只是冰山一角
讓我們仔細說來
數據庫雖然家族龐大
但一般來說可以分為兩種
文件型數據庫和C/S型數據庫
下面分別討論
文件型數據庫 所謂文件型數據庫
顧名思義
是基於文件的(file
based)
數據被按照一定格式儲存在磁盤裡
使用時由應用程序通過相應的驅動程序甚至直接對數據文件進行讀取
也就是說
這種數據庫的訪問方式是被動式的
只要了解其文件格式
任何程序都可以直接讀取
這樣就使得它的安全性相當糟糕
同時
在蓬勃興起的網絡應用
文件型數據庫更是難有用武之地
效率低下
不支持很多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 Engine
Borland數據庫引擎)是一個和ODBC類似的東西
orland/Inprise本來企圖用它來統一數據庫接口
但後來Inprise在和微軟的戰爭中敗下陣來(ODBC是微軟搞出來的)
它又不肯放棄BDE
而是將其捆綁在lphi/C++Builder系列開發工具中
結果好象變成這些開發工具的一種附屬品了
用BDE開發數據庫程序相當容易
許多Delphi教科書在寫到數據庫開發這一章時
總是告訴你先在BDE中為某個DBF或Paradox數據庫設置一個別名
然後往窗體上放一個TTable構件
然後將其DatabaseName指向相應的別名……然後
這個數據庫中某個表的內容就在相應的Data
Aware構件中顯示出來了
但是它們具體是怎麼工作的呢?
Delphi對數據庫進行訪問時
事實上通過了很多層次的連接
DataAware構件
DataSource構件
DataSet構件
BDE
數據庫
從上面結構可以看出
BDE負責與具體的數據庫打交道
而Dataset構件與BDE相連
DataSource構件與Dataset構件相連
最後才連接到顯示具體數據的Data
Aware構件
在Delphi的構件面板上
Data Access頁面中的構件一般屬於DataSet構件
例如TTable
TQuery
只要指定它們的DatabaseName屬性
就可以將它們與某個數據庫建立連接
在Data Control頁面中的構件一般是Data
Aware構件
例如TDBGrid
TDBEdit
TDBImage
它們的作用看上去與一般的Delphi構件相似
不同之處在於
可以通過一個DataSource構件作為中介
與DataSet構件相連
並自動顯示相應的數據
用Delphi的數據庫構件建立一個應用程序是如此之方便
但是如果深入下去
會發現事情並不簡單
你可以嘗試自己編寫代碼
訪問數據庫中字段
而不是通過Data
Aware構件由用戶來編輯
如何做到這一點呢?秘密在於Field構件
可以說
Field構件是Delphi數據庫應用程序的基礎
當打開一個DataSet構件時
相應的數據會被讀取
並儲存在TTable或TQuery構件的Fields屬性中
這個屬性被定義為Field數組
通過直接訪問數組
可以使用它們
例如
Table
Fields[
]
AsInteger;
這段代碼訪問了Table
中當前記錄的第一個字段
該字段的類型為Integer
也可以通過使用FieldbyName屬性來使用它們
Table
FieldbyName(
Last Name
)
AsString;
[] []
From:http://tw.wingwit.com/Article/program/Delphi/201311/24812.html