全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)Delphi輔導(dǎo)講義 147

字號(hào):

第十五章 數(shù)據(jù)訪問部件的應(yīng)用及編程
    在這一章里我們主要介紹Delphi的數(shù)據(jù)訪問部件的層次結(jié)構(gòu)、多部件之間的關(guān)系、部件的屬性、方法、事件以及各部件的應(yīng)用。這些部件包括:
    ● TSession部件
    ● 數(shù)據(jù)集部件(TTable和TQuery)
    ● TDatasource部件
    ● 字段對(duì)象TField
    ● 字段編輯器的使用
    ● TReport部件和TBatchMove部件
    我們對(duì)這些部件的屬性、方法和事件進(jìn)行一般性的描述,讀者在實(shí)際使用Delphi開發(fā)應(yīng)用程序時(shí),還可以通過聯(lián)機(jī)幫助獲得有關(guān)部件更詳細(xì)的信息。
    15.1 Delphi數(shù)據(jù)訪問部件的層次結(jié)構(gòu)
    Delphi提供了強(qiáng)大的開發(fā)數(shù)據(jù)庫應(yīng)用程序的能力,它給用戶提供了大量的數(shù)據(jù)訪問部件。以方便程序設(shè)計(jì)人員開發(fā)數(shù)據(jù)庫應(yīng)用程序。這些部件中,有些部件繼承了另一些部件的屬性、方法和事件,也就是說多部件之間存在著繼承和被繼承的關(guān)系,各部件的這種關(guān)聯(lián)便構(gòu)成了一個(gè)層次結(jié)構(gòu)
    圖15.1 Delphi數(shù)據(jù)訪問部件的層次結(jié)構(gòu)
    TSession是全局性的部件,在應(yīng)用程序運(yùn)行時(shí),它自動(dòng)地建立,在設(shè)計(jì)階段和運(yùn)行過程中它是一個(gè)不可見的部件。
    TDatabase部件是為開發(fā)客戶/服務(wù)器數(shù)據(jù)庫應(yīng)用程序時(shí),設(shè)置登錄的數(shù)據(jù)庫的有關(guān)參數(shù)的,它在數(shù)據(jù)訪問部件頁上。
    TDataset部件是不可見的,TTable和TQuery部件是由它派生而來的,這兩個(gè)部件一般被稱為數(shù)據(jù)集部件,它們?cè)跀?shù)據(jù)訪問部件頁上。
    TDatasource部件是連接數(shù)據(jù)集部件和數(shù)據(jù)瀏覽部件的橋梁,它在數(shù)據(jù)訪問部件頁上。
    TFields部件對(duì)應(yīng)于數(shù)據(jù)庫表中的實(shí)際字段,它既可以在應(yīng)用程序的運(yùn)行過程中動(dòng)態(tài)地生成也可以在程序設(shè)計(jì)階段用字段編輯器創(chuàng)建。它是不可見的部件,在程序中我們可以通過TField部件來訪問數(shù)據(jù)庫記錄的各個(gè)字段值。
    15.2 Tsession部件及其應(yīng)用
    TSession部件一般用得較少,但它對(duì)于一些特殊的應(yīng)用是很有用的,在每一個(gè)數(shù)據(jù)庫應(yīng)用程序運(yùn)行時(shí)Delphi自動(dòng)地創(chuàng)建一個(gè)TSession部件。程序設(shè)計(jì)人既不能看見該部件也不能顯示地創(chuàng)建一個(gè)TSession 部件,但是我們可以在應(yīng)用程序中全局性地使用TSession部件的屬性、方法。
    15.2.1 TSession部件的重要屬性及作用
    TSession部件的許多重要屬性是用于控制數(shù)據(jù)庫應(yīng)用程序與數(shù)據(jù)庫的連接的,在一個(gè)應(yīng)用程序中,可以全局性地設(shè)置TSession的有關(guān)屬性值,對(duì)與之相連接的磁盤上的數(shù)據(jù)庫進(jìn)行控制。TSession部件主要有下列屬性:
    Database屬性:是TSession中可以進(jìn)行連接的所有數(shù)據(jù)庫的數(shù)據(jù)庫名字列表,這些數(shù)據(jù)庫的名字常常是實(shí)際數(shù)據(jù)庫的別名,包括數(shù)據(jù)庫的路徑、用戶名、用戶登錄口令等參數(shù)。
    DatabaseCount屬性:是TSession中可以進(jìn)行連接的所有數(shù)據(jù)庫的數(shù)量,它是一個(gè)整數(shù)。
    KeepCounnections屬性:是一個(gè)布爾型屬性,用它說明應(yīng)用程序是否保持與一個(gè)非活動(dòng)數(shù)據(jù)庫的連接。因?yàn)閷?duì)于一個(gè)數(shù)據(jù)庫,當(dāng)該數(shù)據(jù)庫中沒有相應(yīng)的數(shù)據(jù)集部件(TTable或TQuery)被打開時(shí),該數(shù)據(jù)庫將自動(dòng)地變成非活動(dòng)的數(shù)據(jù)庫。缺省情況下,KeePcounnections的值是True,就是說應(yīng)用程序總是保持著與數(shù)據(jù)庫的連接,即使數(shù)據(jù)庫變成了非活動(dòng)的數(shù)據(jù)庫時(shí),也是如此。如果將KeepConnections屬性設(shè)置成False,那么當(dāng)數(shù)據(jù)庫由活動(dòng)狀態(tài)變成非活動(dòng)狀態(tài)時(shí),應(yīng)用程序與該數(shù)據(jù)庫的連接也隨之中斷。
    NetFileDir屬性:說明BDE網(wǎng)絡(luò)控制文件的路徑名。
    PrivateDir屬性:說明存取臨時(shí)文件的路徑名。
    15.2.2 TSession部件的方法:
    TSession部件中的大部分方法是用于向用戶提供與應(yīng)用程序相連接的數(shù)據(jù)庫的信息,如數(shù)據(jù)庫的名字及別名,數(shù)據(jù)庫中的表名以及數(shù)據(jù)庫引擎BDE的有關(guān)參數(shù)等,在設(shè)計(jì)數(shù)據(jù)庫應(yīng)用程序時(shí),想要獲取有關(guān)數(shù)據(jù)庫的信息,調(diào)用TSession部件的下列方法,將會(huì)大大簡(jiǎn)化程序的設(shè)計(jì)。
    GetAliasNames方法:調(diào)用該方法,我們可以獲得數(shù)據(jù)庫引擎BDE中定義的數(shù)據(jù)庫別名。
    GetAliasParams方法:該方法主要用于獲取我們?cè)贐DE中定義數(shù)據(jù)庫別名時(shí)所說明的參數(shù)值,如BDE所在的目錄路徑以及實(shí)際名稱等。
    GetDatabaseNames 方法:調(diào)用該方法可以幫助我們獲得當(dāng)前應(yīng)用程序可以進(jìn)行連接的所有數(shù)據(jù)庫的名字,數(shù)據(jù)庫的名字是用戶使用BDE工具定義的實(shí)際數(shù)據(jù)庫的別名。
    GetDriverNames方法:數(shù)據(jù)庫引擎BDE可以與多種數(shù)據(jù)庫管理系統(tǒng)相連接,如客戶/服務(wù)器數(shù)據(jù)庫管理系統(tǒng)Oracle、Sybase以及本地?cái)?shù)據(jù)庫管理系統(tǒng)dBASE,Paradox等,BDE與每一種數(shù)據(jù)庫管理系統(tǒng)進(jìn)行連接時(shí),都有相應(yīng)的驅(qū)動(dòng)程序,而且這些驅(qū)動(dòng)程序都可以選擇地安裝。通過調(diào)用GetDriverNames方法。我們可以獲得當(dāng)前BDE安裝的數(shù)據(jù)庫驅(qū)動(dòng)程序的名字。
    GetDriverParams方法:BDE的數(shù)據(jù)庫驅(qū)動(dòng)程序中包含著多個(gè)參數(shù),如支持的民族語言、DBMS的版本號(hào)、文件塊大小等,對(duì)于服務(wù)器上的DBMS,還有數(shù)據(jù)庫服務(wù)器的名字等等。
    GetTableNames方法:因?yàn)槊恳粋€(gè)數(shù)據(jù)庫都是由多個(gè)數(shù)據(jù)庫表組成的,我們通過說明數(shù)據(jù)庫名,然后調(diào)用GetTableNames方法,便可以獲得該數(shù)據(jù)庫中全部的數(shù)據(jù)庫表的名字。
    上述這些方法在調(diào)用時(shí)都需要一個(gè)字符串列表作為參數(shù),而且都返回一個(gè)字符串列表的值。
    TSession部件還有一個(gè)叫DropConnections的方法用于控制應(yīng)用程序與數(shù)據(jù)庫的連接,當(dāng)調(diào)用DropConnections方法時(shí),應(yīng)用程序與所有的數(shù)據(jù)庫的連接將會(huì)切斷。