13.3 Delphi數據庫的體系結構
Delphi使用可視化的部件創建數據庫應用,跟創建其它的非數據庫應用程序一樣,數據庫部件都具備一定的屬性,程序設計人員可以在設計過程中設置部件的多種屬性,也可以在程序運行過程中通過程序來設置部件的各種屬性。
在Delphi部件板上有兩頁數據庫部件用於開發數據庫應用程序:
數據訪問部件頁:該頁上的部件主要用於說明有關的數據庫的信息,如應用程序要訪問(連接)的數據庫,要訪問數據庫中的具體的數據庫表,以及要訪問表中哪些字段等,在實際的開發應用中常用的部件有TDataSource、TTable、TQuery等。
數據控制部件頁:該頁上的部件主要用於顯示浏覽數據庫中的數據信息,為用戶提供了一個可視化的界面,常用的部件有:TDBGrid、TDBEdit、TDBCheck等,可以讓用戶對數據庫中的信息進行有效的浏覽、編輯、插入、刪除等操作。
TTable、TQuery、TStoredproc部件負責與實際的數據庫表聯系,並從中獲取數據信息,因而它們又常常被稱為數據集部件,它們在程序設計過程中是可見的,但在程序運行時是不可見的,它們通過 BDE 為應用程序提供與數據庫的連接, 數據控制部件通過TDataSource部件與數據集部件相連,為用戶提供一個可視化的界面,並在其中顯示數據庫中的數據信息。
13.3.1 數據訪問部件
數據訪問部件頁上提供了一組數據訪問部件用來訪問數據庫中的數據。
圖13.3 數據訪問頁上的數據訪問部件
當要創建一個數據庫應用時,首先在窗體中選擇一個數據訪問部件,然後為數據訪問部件設置有關的屬性,說明要訪問的數據庫、數據表以及表中的記錄等,數據訪問部件為數據控制部件與數據源建立一條通道。數據訪問部件在程序運行時是不可見的。下表列出了數據訪問頁上的數據訪問部件以及它們的主要用途:
表13.4 數據訪問部件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
部件名稱 主 要 用 途
────────────────────────────
作為數據集部件TTable、TQuery、StoredProc組
TDataSource 件與數據浏覽件TDBGrid、TDBEdit之間傳送數據
的通道。
────────────────────────────
它是存取磁盤上數據庫表的媒介,它通過BDE存
TTable 取數據庫表中的數據,TTable再與TDataSource
進行“對話”,使得數據浏覽部件能夠有效地從
TTable中訪問數據並能顯示和編輯其中的數據。
────────────────────────────
它利用SQL語言訪問磁盤上數據庫表中的數據,
TQuery 並與TDataSource“對話”,實現數據浏覽部件
對數據庫的訪問。
────────────────────────────
TStoredProc 在應用程序中,它主要用來訪問遠程服務器中的
存貯過程
────────────────────────────
當應用程序要登錄到一個遠程服務器上的數據庫
TDatabase 時,可以用該部件來建立應用程序與數據庫永久
性的連接。
────────────────────────────
TBatchMove 用於復制數據庫表的結構或表中的記錄。
────────────────────────────
TReport 用於創建數據庫的輸出報表。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
值得指出的是在絕大多數數據庫應用中,一般都是使用數據集部件TTable、TQuery或TStoredProc與磁盤上的數據庫進行連接,用TDataSource部件連接數據控制部件和數據集部件,當然用戶也可以自定義數據集部件,用於數據庫應用當中, TTable 、 TQuery 和TStoredProc部件中都包含一個不可見的TField類型的對象Fields,Fields是一個串列表,它對應於數據庫表或一個查詢結果的列或字段。Fields對象是伴隨著TTable、 TQuery 和TStoredproc部件的活動狀態動態地建立的,當數據庫表被關閉時,Fields 對象也隨之消失,它在程序設計和程序運行過程中都是不可見的。
當然也可以利用Fields Editor建立永久性的Fields對象供Delphi應用程序使用,我們將在後面的內容中詳細闡述。
13.3.1.1 TTable部件
利用TTable部件程序設計人員甚至可以不需要編寫任何程序便可對數據庫進行訪問,在一個應用程序窗體中放置一個TTable部件的過程如下:
1、在部件選擇板上選擇Data Access頁;
2、單擊Table圖標;
3、在窗體內單擊鼠標,獲得一個TTable部件;
4、為TTable部件設置有關的屬性:
DatabaseName屬性指定要訪問的數據庫所在的路徑名,路徑名可以用別名來表示。
TableName屬性指定要訪問數據庫中具體的數據庫表。
Active屬性設置為True時,表示打開要訪問的數據庫表;設置為False時,暫時不打開要訪問的數據庫表。
缺省情況下,TTtable部件中包含了要訪問的數據庫表中所有的字段和記錄,用鼠標雙擊TTable圖標時,會出現一個字段編輯器(Fields Editor),使用Fields Editor可以對TTable部件中包含的數據庫表中的字段的顯示格式等屬性進行編輯,具體可以控制:
● 建立一個永久性的字段列表,包括字段的順序,字段的類型等,即使磁盤上實際的數據庫表的表結構發生了改變,我們建立的這個永久性的字段列表也不會發生改變
● 為每個字段指定一個便於閱讀和使用的名字
● 指定字段顯示的順序
● 為每個字段指定一個用於顯示的字符串
● 為字段增加合法性檢驗
● 為了顯示的需要還可以建立新的字段(如可計算的字段)具體的使用方法見後面的內容
13.3.1.2 TQuery部件
TQuery部件是我們使用SQL語言開發數據庫應用程序的有力工具,因為使用SQL語言,我們可以非常方便靈活地對一個或多個數據庫表中的記錄進行訪問,所以利用TQuery我們可以查詢本地的數據庫如Pà?aradox和dBASE數據庫系統中的數據,我們還可以使用TQuery部件對一個遠地的數據庫SQL服務器進行訪問,建立Client/Server模式的應用程序。
在一個應用程序窗體中放置一個TQuery部件的過程如下:
1、在部件選擇板上選擇Data Access頁;
2、單擊Query圖標;
3、在窗體內單擊鼠標,獲得一個TQuery部件;
4、為TQuery部件設置有關的屬性:
DatabaseName屬性指定將要訪問的數據庫的路徑名。
SQL屬性指定對數據庫表進行訪問SQL語句,它可以是一條查詢語句也可以是一條修改語句或插入語句等。在對象浏覽器上,單擊SQL屬性時,會打開一個字符串編輯器供程序設計者輸入SQL語句。
在這裡要注意在TQuery部件中,不是用TableName 屬性來指定要訪問的數據庫中的數據庫表,而是在SQL屬性中,通過SQL語句來指定將要訪問的數據庫表。
13.3.1.3 TDataSouece部件
TDataSource部件是連接數據集部件TTable、TQuery、 TStoredProc 和數據控制部件TDBGrid、TDBEdit等的橋梁,TTable、TQuery、TStoredProc部件通過BDE可以實現與磁盤上的數據庫連接即訪問,但它們本身不能顯示數據庫中的數據信息, 而數據控制部件如TDBGrid、TDBEdit等能夠提供可視化的界面,顯示數據庫中的數據信息,但它們不具備訪問磁盤數據庫的能力,正是TDataSource將這兩者有機地結合起來,使得用戶才能交互地對數據庫中的數據信息進行查詢、修改、插入、刪除等操作。
在應用程序窗體中放置TDataSource部件的過程如下:
1、在部件選擇板上選擇Data Access頁;
2、單擊DataSource圖標;
3、在窗體內單擊鼠標,獲得一個TDataSource部件;
4、為TDataSource部件設置有關的屬性:
Dataset屬性指定一個數據集部件,可以是TTable、TQuery或TStoredProc部件的名字。