16.1 數據浏覽部件的基本特性
大多數的數據浏覽部件是從標准部件中演變過來的,它們具有一些相似的特性,如TDBGrid部件和TStringGrid部件,TDBEdit和TEdit部件,TDBListBox和TListBox等等,只是數據浏覽部件是專門用於顯示和編輯數據庫中記錄的字段信息而已。它們的使用方法以及屬性有很大的不同。在程序設計階段,當數據浏覽部件通過TDatasource部件和TTable部件連接到一個物理數據庫時,便可在其中觀看到數據庫中的數據信息,也就是說在程序設計階段便可以看到應用程序運行之後的效果,這種特性給我們修改應用程序帶來了方便。
數據浏覽部件是通過TDatasource部件連接到TTable部件中具體的字段部件的,因而數據控制部件具有一些共同的屬性,用於連接TDatasource部件和TFIEld部件。
Datasource屬性:說明數據浏覽部件連接的數據源部件TDatasource,數據浏覽部件是從TDatasource部件中獲取數據的。
DataFIEld屬性:說明數據浏覽部件對應數據庫表中實際的字段名稱。該屬性的值其實是TDataSource連接的數據集部件TTable或TQuery部件中的字段部件的名字。
因此要創建一個應用程序顯示和編輯數據庫表中的記錄,一般要在應用窗體中放置一個數據集部件(TTable部件或TQuery部件)和至少一個數據源部件TDataSource部件以及多個數據浏覽部件。其創建的一般步驟如下:
1.在窗體中放置上述所說的部件並連接數據集部件、數據源部件。
2.為各數據浏覽部件設置DataSource屬性值為窗休中存在的TDataSource部件的名字。
3.設置各數據浏覽部件的DataFIEld屬性為數據集部件TTable或TQuery部件中存在的字段部件的名字。
在這裡需要注意的是:TDBGrid部件和TDBNavigator部件是自動地訪問數據集部件中所有可以訪問的字段部件的,因此它們是沒有DataFIEld屬性的,對於這些部件可以跳過第3步。
Enabled屬性:當數據浏覽部件連接到數據集部件時,它的Enabled屬性決定了數據浏覽部件能否接受來自鼠標、鍵盤和定時器事件的消息。當Enabled屬性值為False時,數據浏覽部件將變為無效而不能接受外界的信息。當與數據浏覽部件相連的TDataSource部件的Enabled屬性為False時或與數據源部件TDataSource部件相連的數據集部件TTable或TQuery部件的Active屬性為False時,數據浏覽部件也會隨之而變為無效。
ReadOnly屬性:大多數的數據浏覽部件能夠用來編輯修改與之對應的字段,因而有ReadOnly屬性,該屬性用來控制是否可以在數據浏覽中編輯修改字段的值。缺省情況下,該屬性的值為False,也就是說用戶可以在其中編輯修改字段的值。
當然用戶要想通過數據浏覽部件編輯修改數據庫表中的記錄字段時,還要受到其它因素的制約。除了數據浏覽部件本身的ReadOnly屬性設置為False外,還要設置其相應的字段部件和數據集部件的CanModify屬性True性;設置TDataSource部件的AutoEdit屬性為True,如果數據庫表是SQL數據庫服務器中的數據庫表,用戶必須要具有讀寫數據庫的權限等。當然在實際的程序設計過程中並沒有這樣繁瑣,因為很多屬性的缺省值都是允許用戶修改表中的記錄的。
除了TDBGrid部件之外,如果通過一個數據浏覽部件修改字段值,那麼當光標(或焦點)離開數據浏覽部件時,數據浏覽部件中被修改的值就會自動地被寫回到磁盤數據庫中。若在焦點沒有離開數據浏覽部件之前,按ESC鍵,那麼Delphi會自動地放棄其對字段值的修改。在TDBGrid部件中修改表中的記錄時,只有當焦點離開當前的記錄時,即記錄指針移到其他記錄上時,用戶對當前記錄的修改會被寫回磁盤上的數據庫表,在焦點沒有離開當前記錄時,按ESC鍵,Delphi會自動放棄對當前記錄的修改。
16.2 使用TDBText部件顯示表中的數據
TDBText部件是一個只讀的數據浏覽部件,它類似於TLabel部件。只是TDBText 部件用於顯示數據庫表中記錄的指定字段的值。因為TDBText部件顯示的是表中當前記錄的指定的字段的值,因而它顯示的內容也是動態的,在其中顯示的內容隨著記錄指針的移動而變化。用TDBText部件顯示Customer.DB表中的Company字段信息時可用如圖16.2所示的窗體來實現。
其中各部件的屬性設置如表16.2所示
表16.2 表中各部件的屬性設置
━━━━━━━━━━━━━━━━━━━
屬 性 屬 性 值
───────────────────
Table1.DatabaseName DEMOS
Table1.TableName Customer.DB
Datasource1.DataSet Table1
DBText.DataSource DataSource1
DBText.DBFIEld Company
━━━━━━━━━━━━━━━━━━━
16.3 使用TDBEdit部件顯示和編輯表中的數據
TDBEdit部件是專門用於顯示編輯數據庫表中當前記錄的各個字段值的數據浏覽部件,在應用程序中,我們常常用一個TDBEdit部件來對應表中一個字段,通過設置TDBEdit部件的DataSource、DataFIEld屬性便可以為TDBEdit部件指定表中相應的字段。如果用戶希望能通過TDBEdit部件編輯修改數據庫表中的字段值,還要設置TDBEdit部件的ReadOnly屬性為False,設置與TDBEdit相連的數據源部件TdataSource部件的AutoEdit屬性為True以及確保與TDataSource部件相連的數據集部件TTable或TQuery部件處於編輯狀態,即設置它們的CanModify屬性為True。
例如,在圖16.3所示的窗體中,使用多個TDBEdit部件顯示和編輯Customer.DB表中當前記錄的各個字段。窗體中各部件的屬性如表16.3所示。
圖16.3 用TDBEdit部件顯示和編輯表中的數據
表16.3 窗體中各部件的屬性
━━━━━━━━━━━━━━━━━━━━
屬 性 屬 性 值
────────────────────
Table1.DatabaseName DEMOS
Table1.TableName Customer.DB
Datasource.DataSet Table1
DataSource.AutoEdit True
DBNavigator.DataSource DataSource1
━━━━━━━━━━━━━━━━━━━━
窗體中其它部件都是TLabel部件和TDBEdit部件,TLabel部件用於顯示表中各字段的名字,TDBEdit部件對應表中各個字段。程序運行之後如圖16.4所示。用戶可以在其中任何一個TDBEdit部件中修改其中的字段值。
用TDBEdit部件顯示和修改表中的數據
窗體中還使用了一個TDBNavigator部件,使用它的目的是在表中移動記錄指針,還可以進行修改、插入、刪除記錄等操作,具體的使用和操作參看 16.5 TDBNaigator部件的使用一節。
16.4 用TDBGrid部件顯示和編輯表中的數據
TDBGrid部件和TDBEdit部件一樣,它們是專門用來顯示和編輯數據庫表中的數據的,但TDBGrid部件的功能更強大一些,它可以以網格的形式顯示數據庫表中全部記錄的所有字段信息。
用TDBGrid顯示數據庫表中的記錄信息
在TDBGrid部件中顯示數據庫表中的記錄信息時,如果TDBGrid使用數據集部件在運行過程中動態生成的字段部件時,TDBGrid顯示數據庫表中的記錄是按表中記錄的缺省順序和字段的缺省順序顯示表中的記錄信息,而且要顯示表中各個記錄的全部字段的值。而在大多數情況下,用戶可能希望按自己喜歡的字段順序顯示記錄的各個字段,有時還希望只顯示記錄的部分字段值,要達到這一目的,必須在設計階段使用字段編輯器來創建永久性的字段部件,並且還要設置各個字段部件有關的屬性。
當使用字段編輯器(FIElds Editor)創建永久性的字段部件提供給TDBGrid部件來使用時,我們可以在TDBGrid部件中更靈活地顯示數據庫表中的記錄信息。例如在字段編輯器中的FIElds列表框中我們可以設定字段部件的顯示順序,在設定好字段的顯示順序之後,TDBGrid部件便按這個順序顯示記錄的各個字段值,當我們設置字段部件的DisplayFormat和EditFormat屬性之後,在TDBGrid部件中便相應地以設定的顯式和編輯格式顯示字段值和編輯字段值;當設置某一個字段部件的Required屬性為True時,當插入一條新記錄時,必須要為該字段輸入相應的字段值,否則會出錯;通過設置字段部件的Visible屬性,可以確定相應的字段值是否在TDBGrid組件中顯示。有關使用字段編輯器來創建字段部件,設置字段部件的屬性請參看3.6.2節。