數據浏覽部件主要用於顯示和編輯數據庫表中的數據,因而它們又常常被稱為數據控制部件或數據明了部件,它們在部件選擇板中的DataControls頁上,圖16.1顯示的是DataControls頁上的全部數據浏覽部件,其中的TDBGrid部件用於全屏幕顯示和編輯數據庫表中的記錄,TDBNavigator用於在數據記錄之間導航、插入記錄、刪除記錄、投寄被修改的記錄。
圖16.1 DataControls部件頁上的部件
在表16.1中,我們對DataControls部件上的各個數據浏覽部件的一些特性進行描述:
表16.1 各數據浏覽部件概述
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
部 件 名 稱 特 性 描 述
────────────────────────────────
TDBGrid 用網格的形式顯示數據庫表中的記錄信息,網格中的
各列可以在設計階段使用字段編輯器創建也可以在運
行過程中用程序設定
────────────────────────────────
TDBNavigator 它提供了一組按鈕用於數據庫表中的導航,編輯修改、
插入、刪除記錄以及刷新數據的顯示,TDBNavigator中
包含的控制按鈕在設計階段可以進行選擇
────────────────────────────────
TDBText 用於顯示數據庫表中當前記錄的字段值
────────────────────────────────
TDBEdit 用於顯示和編輯數據庫表中當前記錄指定的字段值
────────────────────────────────
TDBMemo 用於顯示數據庫表中的備注型字段,備注型字段中可
以包含多行字符甚至可以是BLOB(大二進制對象)數據
────────────────────────────────
TDBImage 用於顯示數據庫表中的圖像字段和BLOB數據
────────────────────────────────
TDBListBox 當用戶編輯修改表中當前記錄的某個字段時,該部件
是一個包含多個選擇項的列表框,用戶可以從中選擇
一個項做為字段的值
────────────────────────────────
TDBComboBOx 該部件是一個組合框,當用戶編輯修改表中當前記錄
的一個指定字段時,可以直接在該部件中輸入字段值
也可以單擊該部件從下拉式列表框中選擇一個字段值
────────────────────────────────
TDBCheck 用於顯示數據庫中的字段信息的檢查框,當表中字段
的值與該檢查框的ValueChecked屬性值相匹配時,該
檢查框被選中
────────────────────────────────
TDBReadioGroup 使用該部件可以為用戶提供一組選擇項,但用戶只能
從中選擇一個可選項
────────────────────────────────
TDBLookapList 當用戶要編輯修改數據庫表當前記錄的指定字段時,
使用該部件提供多個可選項,這多個可選項是從相關
的其他表中讀取的,且以列表框的形式提供給用戶
────────────────────────────────
TDBLookupCombo 該部件結合了TDBEdit部件和TDBComboBox部件的功能,
用戶可以直接向該部件中輸入字段值,也可以從下拉
式列表框中選擇一個可選項,只是下拉式列表框中的
可選項是從相關的其他的數據庫表中讀取來的。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
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節。
16.4.1 TDBGrid部件的主要屬性及應用
TDBGrid部件是用於顯示和編輯數據庫表中的記錄信息的重要部件,它是我們在程序設計過程當中要經常使用的、靈活地用於顯示和編輯數據庫表中的記錄信息的一個強有力的工具。TDBGrid具有很多重要的屬性,我們可以在程序設計階段和程序運行過程中進行設置。TDBGrid部件的一些重要屬性及其設置方法請參看聯機幫助文件。TDBGrid部件中一些重要的屬性是Option屬性、DrawMode屬性和DefaultDrawing屬性,我們重點對兩個屬性進行闡述。
Options屬性:它是TDBGrid部件的一個擴展屬性,在程序設計階段設置Options屬性可以控制TDBGrid部件的顯示特性和對事件的響應特性。Options屬性在TDBGrid部件的屬性欄中顯示時,它的前面帶有一個“+”標志,雙擊“+”標志,便可以展開一個布爾型屬性列表,用戶可以逐個地修改其中的各個屬性值,修改完畢後可以雙擊Options屬性前的“-”標志,使TDBGrid部件的屬性列表恢復到原來的顯示狀態。
表16.5列出了Options屬性中包含的所有的擴展屬性項以及它們對TDBGrid部件的影響。
表16.5 TDBGrid部件的Options屬性中的擴展屬性項
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
屬 性 名 取 值 及 影 響
─────────────────────────────────
dbEditing True: 缺省情況下為此值,確保用戶能夠在網格中編輯插
入和刪除數據庫表中的記錄
False:在網格中不能編輯、插入和刪除表中的記錄
─────────────────────────────────
dbAlwaysShow True: 當用戶選中記錄中的一個字段時,自動地使該字段
Editor 處於編輯狀態
False:缺省情況下為此值。當一個字段被選中,它不能
自動地變成編輯狀態
─────────────────────────────────
dgTitles True: 缺省情況下為此值。在網格的第一行中顯示字段名
或字段標題
False:在網格中不顯示字段名或字段對應的標題
─────────────────────────────────
dgIndicator True: 缺省情況下為此值。在網格的最左邊用一個黑箭頭
標注當前記錄指針所在的位置,在插入狀態時,箭
頭變成星狀,在編輯狀時,箭頭變成"I"頭。
False:在網格中不標識當前記錄指針的位置
─────────────────────────────────
dgColumnResize True: 缺省情況下為此值。通過拖拉網格的垂直分隔線可
以改變網格中各列的寬度,在具體操作時要拖拉各
列中顯示字段標題區域中的垂直分隔線。
False:網格中各列的寬度不能改變
─────────────────────────────────
dgCloLines True: 缺省情況下為此值。在網格中顯示各列之間的垂直
分隔線。
False:在網格中不顯示垂直分隔線
─────────────────────────────────
dgRowLines True: 缺省情況下為此值。在網格中顯示各行之間的水平
分隔線。
False:在網格中不顯示水平分隔線。
─────────────────────────────────
dgTabs True: 缺省情況下為此值。可以在記錄的各字段之間移動
輸入焦點(也即選擇提示棒)
False:不能在記錄的名字段之間移動輸入焦點,在網格中
按Tab鍵時,直接跳出網格
─────────────────────────────────
dgRowSelect True: 選擇提示棒覆蓋整條記錄中的全部字段
False:缺省情況下為此值。選擇提示棒一次只覆蓋記錄中
的一個字段
─────────────────────────────────
dgAlwaysShow True: 缺省情況下為此值。在網格始終顯示選擇提示棒,即
-Selection 使其控件獲得焦點時,也是如此。
False:只在當網格獲得焦點時,才顯示選擇提示棒。
─────────────────────────────────
dbConfirmDelete True: 缺省情況下為此值。當在網格中刪除記錄時,彈出確
認信息。
False:在網格中刪除記錄時不彈出確認信息。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
用戶想了解這些可選屬性項的作用和影響,還可以參看聯機幫助信息。
DragMode屬性:該屬性有兩個可選的屬性值。當它的值被設置為dmManual時,在應用程序運行過程中,用戶可以用鼠標拖放網格中的各列,改變各列在網格中的顯示順序和位置。當用鼠標拖放網格中的一列、改變它在網格中的位置時,只是改變了該列在數據集中的位置,並沒有改變它對應的數據庫表中的位置。當該屬性的值被設置成dmAutomatic時,用戶不能用鼠標拖放網格中的各列而改變它在網格中的位置。
DefalultDrawing屬性:該屬性是布爾型屬性,它用於控制網格中各網格單元的繪制方式。在缺省情況下,該屬性的值為True,也就是說Delphi使用網格本身缺省的方法繪制網格中各網格單元,並填充各網格單元中的內容,各網格單元中的數據根據其對應的字段部件的DisplayFormat屬性和EidtFormat屬性進行顯示和繪制。如果DefaulDrawing屬性被設置為False時,Delphi不會自動地繪制網格中各網格單元和網格單元中的數據,用戶必須自己為TDBGrid部件的OnDrawDataCell事件編寫相應的程序用於繪制各網格單元和其中的數據。
在了解了TDBGrid部件的各個屬性之後,我們便可以使用TDBGrid部件來顯示和編輯數據庫表中的數據了。圖16.5所示的應用窗體中各部件的屬性設置如表16.6所示。
表16.6 各部件的屬性設置
━━━━━━━━━━━━━━━━━━━━
屬 性 名 屬 性 值
────────────────────
Table1.DatabaseName DEMOS
Table1.TableName Customer.DB
Table1.CanModify True
DataSource1.DataSet Table1
DataSource1.AutoEdit True
DBGrid1.Datasource DataSource1
DBGrid1.ReadOnly False
━━━━━━━━━━━━━━━━━━━━
在其他數據浏覽部件(如TDBEdit)中編輯修改其中的內容時,只要用戶用Tab鍵或鼠標將焦點移到其他部件時,用戶對該字段的修改會自動地寫回到數據庫表中,使用TDBGrid部件編輯修改數據庫表時,Delphi是以記錄為基本單位將修改寫回磁盤上的數據庫表的。用戶在編輯和修改表中的當前記錄時,只有用戶將記錄指針移到其他的記錄時,Delphi才將用戶對當前記錄的修改寫回到磁盤上的數據庫表,否則,用戶即使改變焦點到窗體中的其他部件,Dephi也不會投寄用戶對當前記錄的修改。Delphi在向數據庫表投寄TDBGrid部件中的被修改的記錄時,它會自動地檢查所有與當前數據庫相連的數據浏覽部件的狀態,只要其中有任何一數據浏覽部件正在修改數據,這時會彈出出錯信息,並且當前記錄的修改不會被投寄(即被寫回磁盤上的數據庫表)。
16.4.2 TDBGrid部件的事件及應用
TDBGrid部件在具有很多重要屬性的同時,Delphi也為它賦予了一些事件,以用於控制用戶在TDBGrid部件中的操作,我們通過為其中的一些事件編寫處理程序,可以有效地控制TDBGrid部件的行為。因為在TDBGrid部件中一次是顯示多條記錄和記錄中的多個字段,也許在實際應用中,不同的用戶各有自己特殊的需要,如只想改變其中某一列的值或者控制用戶每次只能進出網格中指定的列等等。表16.7列出了TDBGrid部件的主要事件及目的用途。
表16.7 TDBGrid部件中的主要事件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
事 件 名 目 的 用 途
────────────────────────────────
OnColEntor 當用戶進入網格各列時,觸發該事件
OnColExit 當用戶離開網格各列時,觸發該事件
OnDblClick 當用戶在網格中雙擊鼠標左鍵時,觸發該事件
OnDragDrop 當用戶在網格中用鼠標進行拖放操作時,觸發該事件
OnDragOver 當用戶在網格中用鼠標拖動網格時,觸發該事件
OnDrawDataCell 用於定制繪制網格中各網格單元,當向網格中填充數
據時觸發該事件
OnEndDrag 當用戶停止拖動網格時,觸發該事件
OnEnter 當網格獲得焦點時,觸發該事件
OnExit 當網格失去焦點時,觸發該事件
OnKeyDown 當用戶在網格中按下任何鍵或組合鍵時,觸發該事件
OnKeyPress 當用戶在網格中按了任何一個數字鍵或字母鍵時,觸
發該事件
OnKeyUp 當用戶在網格中釋放任何被按下的鍵時,觸發該事件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
上述這些事件在我們開發實際的應用程序時,是很有用處的,讀者們可以仔細地研究這些事件的用途,並參看聯機幫助信息。
例如,我們可以為TDBGrid部件的OnDblClick事件編寫處理程序,當用戶在網格中雙擊鼠標左鍵時,彈出一個列表框供用戶為網格中某一列選擇一個字段值。在例16.1中我們創建如圖16.5所示的應用,在Object Inspector中設置各字段部件的Visible屬性,在網格中只顯示CustNo、Company、Country和City字段。我們為DBGrid編寫OnDblclick事件處理過程,當用戶編輯修改Country字段時,雙擊鼠標左鍵便彈出一個列表框ListBox1,其中顯示“中國”、“美國”、“日本”、“英國”、“法國”、“俄羅斯”供用戶選擇,用戶單擊其中的國家名稱後,將相應的洲名選入網格中。
其中ListBox1的Items屬性寫入上述國家的名稱,並且設置其Visible屬性為False。
6.5 TDBNavigator部件及其應用
TDBNavigator 部件主要用於在數據集中進行記錄導航和為用戶操縱數據集中的記錄提供了一組簡單明了的控制按鈕。TDBNavigator部件中包含一組控制按鈕,用戶單擊其中的按鈕可以向前向後移動記錄指針、插入記錄、修改現存記錄、投寄對記錄的修改、取消修改、刪除記錄;以及刷新記錄的顯示等。
圖16.7為TDBNavigator部件中的控制按鈕。
下表描述了TDBNavigator部件中的各個控制按鈕。
表16.8 TDBNavigator部件中的控制按鈕
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
按鈕名稱 主 要 功 能
─────────────────────────────────
First 將當前記錄指針移到數據庫表中第一條記錄處
Prior 將記錄指針移到當前記錄的前一條記錄處
Next 將記錄指針移到當前記錄的後一條記錄處
Last 將當前記錄指針移到數據庫表中最後一條記錄處
Insert 調用數據集部件的Insert方法,在當前記錄的前面
插入一條新記錄,並將數據集部件置為插入狀態
Delete 刪除當前記錄,如果TDBNavigator部件的ConfirmDelete
屬性設置為true時,會彈出刪除確認對話框
Edit 將數據集部件置為編輯狀態,以便用戶修改當前的記錄
Post 投寄對當前記錄的修改
Cancel 取消對當前記錄的修改,並將數據集部件置為浏覽狀態
Refresh 清除數據浏覽部件的顯示緩沖區,並用與其相連的數據
集部件(TTable或TQuery)中的記錄刷新顯示緩沖區。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TDBNavigator部件的屬性較少。下面我們作一簡單的介紹:TDBNavigator部件的一個重要屬性是VisibleButtons屬性,該屬性中包含著多個可選的擴展子屬性,主要用於選擇TDBNavigator部件中各個控制按鈕的顯示與否的。因為在實際的應用當中,我們並不需要那麼多的控制按鈕。如在一個浏覽數據庫表的應用中,我們一般只需要First、Prior、Next、Last四個按鈕就行了,那麼我們便在VisibleButtons屬性中設置其它的按鈕為False即可。
ShowHint屬性:該屬性是布爾型屬性,它用於控制是否顯示TDBNavigator部件中各按鈕的動態提示信息。缺省情況下該屬性的值為False,當設置它的值為True時,當用戶將鼠標光標停留在TDBNavigator部件中某一個控制按鈕上,超過1秒鐘時間後,Delphi便會自動顯示有關該控制按鈕的提示信息。
Hints屬性:在缺省情況下,TDBNavigator部件中的各控制按鈕都有相應的動態提示信息,如First、Prior、Next、Last等,用戶可以根據自己的需要,通過設置Hints屬性可以為各控制按鈕設置其他的動態提示信息,用戶自己設置的動態提示信息會覆蓋原來的提示信息。
16.6 TDBMemo部件及其應用
TDBMemo部件主要用於顯示和編輯數據庫表中的大二進制(BLOB)類型的字段值。TDBMemo部件能夠顯示多行文本,也允許用戶在其中輸入和修改多行文本信息,它是Delphi中用來顯示和編輯數據庫表中的大二進制類型的文本字段的唯一的數據浏覽部件。
TDBMemo部件的主要屬性和作用如下:
ReadOnly屬性:這是布爾型屬性,為True時,用戶只能在TDBMemo部件中顯示BLOB型文本信息,如Paradox和dBASE數據庫表中的備注型字段。當為False時,用戶在TDBMemo 部件中不僅可以顯示BLOB文本信息而且還允許用戶編輯修改其中的文本信息。
MaxLength屬性:該屬性是整數型屬性,設置該屬性的值用於限制用戶向TDBMemo 部件中輸入字符的個數。若設置該值為0時,表示輸入字符的個數沒有限制。
SCrollBar屬性:說明TDBMemo部件是否顯示滾動條。
WordWrap屬性:說明在TDBMemo部件中輸入文本信息時,輸入到右邊界時,是否自動換行。
Alignment屬性:說明文本信息在TDBMemo部件中的對齊方式,有三種可選值:taLeftJustify、taCenter和taRightJustify。其含義分別是左對齊,居中和右對齊。
在運行過程中,用戶對TDBMemo部件中顯示的文本信息是不能夠進行剪切、拷貝和粘貼操作的,要想具備這些功能,用戶必須編程調用CutToClipboard、CopyToClipboard 和PasteFromClipboard方法分別來實現剪切,拷貝和粘貼操作。
AutoDisplay屬性:因為TDBMemo部件中包含著大量的文本信息。應用程序在運行過程中要顯示其中的信息需要花費很多的時間,特別是當用戶移動記錄指針時,都要更新TDBMemo部件中顯示的信息,這樣會大大減慢程序的運行速度。為此Delphi為TDBMemo部件設定了AutoDisplay屬性,用來控制是否自動顯示表中的備注型字段。當AutoDisplay設置為False時,在TDBMemo部件中只顯示其對應表中的字段名而不顯示字段中的文本信息,用戶如果想浏覽字段中的文本信息,用鼠標左鍵雙擊TDBMemo部件的內部即可;當設置AutoDisplay屬性為True時,在TDBMemo部件中會自動地顯示其對應數據庫表中的字段值。
這裡要注意的是,TDBMemo部件中顯示和編輯文本信息的最大字節數為32K,在使用過程中不要超過這一限制。
圖16.8是TDBMemo顯示數據庫表中備注型字段的情形。該例子在C:\Delphi\DEMOS\DA子目錄中,項目名稱為FashFact.dpr。
用TDBMemo部件顯示備注型字段
16.7 TDBImage部件及其應用
TDBImage部件與TDBMemo部件具有很多相似的屬性,它是用來顯示和編輯數據庫表中的BLOB類型的位圖圖像字段的。
圖16.8中同時也使用了一個TDBImage部件來顯示數據庫表中的位圖圖像。
缺省情況下,在TDBImage部件中是允許用戶對位圖圖像進行編輯的,如將圖像剪切或拷貝到剪帖板上或從剪帖板上粘帖到TDBImage部件中等操作,同時也可以在程序中調用CutToClipboard、CopyToClipboard和PasteFromClipboard方法來實現剪切、拷貝、粘帖操作,當然要進行上述操作必須確保TDBImage的ReadOnly屬性值為False。
TDBImage部件也具有一個AutoDisplay屬性,該屬性的控制和作用與TDBMemo 部件的AutoDisplay屬性是一樣的。
16.8 數據浏覽部件中的列表框和組合框
在數據浏覽部件中有四個部件類似於標准部件中的列表框和組合框,這些列表框和組合框主要是在數據庫應用程序中為用戶提供一系列的可選擇的字段值。注意這些部件只能與TTable部件配合使用,而不能與TQuery部件配合使用。
表16.9 數據浏覽部件中的列表框和組合框
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
部 件 名 用 途
──────────────────────────────────
TDBlistBox 在用戶修改當前記錄中指定的字段值時,可用該部件顯示
一個字段值列表供用戶選擇
TDBComboBox 把一個TDBEdit部件與一個可選的字段值列表結合在一起,
當用戶修改當前記錄中的字段時,可以直接從部件中輸入
新的字段,也可以打開下拉式列表框選擇其中的一個可選項。
TDBLookapList 當用戶要編輯修改數據庫表當前記錄的指定字段時,使用
該部件提供多個可選項,這多個可選項是從相關的其它數
據庫表中讀取的,且以列表框的形式提供給用戶
TDBLookupCombo 該部件結合了TDBEdit部件和TDBComboBOx部件的功能,用
戶可以直接向該部件中輸入字段值,也可以從下拉式列表
框中選擇一個可選項,只是下拉式列表框中的可選項是從
相關的其他數據庫表中讀取來的。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
16.9 TDBComboBox部件
TDBComboBox部件中包含了TDBEdit部件的全部功能,它們具有相似性,不同的是在運行過程中TDBComboBox部件同時有一個下拉式列表框,在下拉式列表框中有一組可供選擇的項供用戶選擇,這些可選項是在設計階段由程序設計人員提供給TDBComboBox部件的Items屬性的。圖16.9是TDBComboBox部件的下拉式列表框中的內容,注意TDBComboBox部件一定要對應數據庫表中的一個字段。
圖16.9 TDBComboBox部件在運行過程中
TDBComboBox部件的一個重要的屬性是Items屬性,該屬性中包含著TDBComboBox部件在運行過程中下拉式列表框中的可選項,Items中的內容可以在設計階段指定。
如果一個TDBComboBox部件對應著數據庫表中一個字段,那麼當用戶要編輯修改該字段中的值時,可以打開下拉式列表框,從中選擇一個可選項作為字段值,也可以自己在TDBComboBox部件中輸入一個其他的字段值。
TDBComboBox部件還有下列一些重要的屬性,主要用來控制TDBComboBox部件的顯示模式和風格的。
Style屬性:控制TDBComboBox部件列表框的顯示格式的,當它的取值為:
● CSDropDown
缺省情況下為此值,顯示一個下拉式列表框和一個編輯框,下拉式列表框中的可選項都是字符串且各選擇項占居的高度一樣。
● CsSimple
只顯示一個列表框,列表框中的可選項都是字符串,且各選項占居一樣的高度。
● CSDropDownList
顯示一個下拉式列表框和一個編輯框,但用戶不能向編輯框中輸入一個在列表框中沒有的值。
● CSOwnerDrawFixed和CSOWnerDrawVariable
在列表框中不僅有字符串選項而且還允許有其他類型的選項,如位圖圖像等,這方面的詳細信息請參看聯機幫助。
DropDownCount屬性:允許列表框中顯示可選項的最大數目,當可選項數目大於該屬性值時,用戶可以用滾動條察看全部的可選項,當可選項數小於該屬性值時,列表框會自動調整其大小以足夠顯示全部可選項。
ItemHeight屬性:當TDBComboBox部件的Style屬性被設置為CSOwnerDrawFixed時,用此屬性來設置列表框中每個可選項占居的高度。
Sorted屬性:布爾型屬性,它決定列表框中的可選項是否按字母的排列順序排序。
16.10 TDBListBox部件
TDBListBox部件的基本功能與TDBComboBox部件基本上是一樣的,它們的不同之處在於TDBListBox部件沒有下拉式列表框而是一個列表框,在列表框中顯示一組供用戶選擇的可選項,在運行過程中,用戶單擊其中的可選項可以為TDBListBox 部件對應的字段賦一個字段值,但用戶不能自己從鍵盤上輸入一個列表框中不存在的字段值。
如果在應用程序中,TDBListBox對應數據庫表中一個具體的字段,那麼當在數據集中移動記錄指針時,當前記錄中對應TDBListBox部件的字段的值在TDBListBox部件的列表框中將以高亮度顯示,如果當前記錄的該字段值不在列表框中,那麼列表框中的可選項沒有一項是高亮度地顯示的。
TDBListBox的幾個屬性:
IntegralHeight屬性:該屬性是用來控制TDBListBox部件中的列表框的顯示格式的。當該屬性值為True(缺省情況下為此值)時,列表框底部的可選項自動地移到上一次被選用過的可選項的上面。當該屬性的值為False時,列表框底部的可選項的顯示方式取決於TDBListBox部件的ItemHeight屬性,並且列表框底部可選項可能不能被全部地顯示出來。