數據庫組件介紹(Delphi)


在本講及下一講中將為讀者介紹我們程序沒有使用的數據組件,並簡單介紹一下它們的用途,有些給出了應用示例。需要說明的是,雖然在我們的程序中沒有用到,並不表明這些組件不重要,有些還是經常要用的。心鈴不可能詳細講解這些數據庫組件,主要根據自己的經驗給出一些使用技巧、注意事項等等。

1 Session組件。它提供應用程序中數據庫的有關信息,在單機數據庫編程中不顯式地使用它,這是因為每個數據庫應用程序運行時,Delphi將自動創建一個缺省Session組件,用戶可在程序中使用這個缺省的Session組件,而沒有必要在設計時設置一個Session組件。Table、Query等組件的屬性中有一個SessionName屬性,缺省為“Default”,這就是缺省的Session組件。比較常用的是用它的GetTableNames方法,在一些查詢有時需要用戶選擇數據庫中的數據表名稱列表。比如在列表框中列出我們的數據庫別名lklb中所有的數據表名稱,代碼如下(窗體上要有激活的數據集組件並指明了數據庫別名):

procedure TForm1.Button1Click(Sender: TObject);

var MyStringList :TStringList;

begin

MyStringList := TStringList.Create;

try

Session.GetTableNames('lklb', '',False, False, MyStringList);

ListBox1.Items := MyStringList;

finally

MyStringList.Free;

end;

end;

GetTableNames方法的語法如下,

語法:Session.GetTableNames(DataBaseName,Pattern,Extensions,SystemTables,List)。

參數說明:

DataBaseName——數據庫名稱。

Pattern——數據表類型,用來限制返回哪種類型的數據表,比如是.DB還是.DBF,如果為空則返回所有類型數據表,可以用通配符。

Extentions——布爾型變量,控制返回的數據表是否有擴展名。

SystemTables——對一些數據庫來說有系統數據表,若設定為True則返回的數據表名稱包括系統數據表。一般設定為False 。

List—保存數據表名稱的字符串列表。

2 DBNavigator組件。DBNavigator組件主要用於為用戶操作數據集中的記錄提供簡捷的控制按鈕。用戶單擊其中的按鈕就可完成移動記錄指針、插入、刪除、修改、保存、刷新記錄等功能。它的 VisibleButtons屬性可指定哪些按鈕顯示,通過設置Hints屬性可以為各控制按鈕設置其他的動態提示信息,用戶自己設置的動態提示信息會覆蓋原來的提示信息,對我們來說提示信息寫成中文比較好。

3 DBtext組件。相當於標簽(Label)組件,只不過它用於顯示數據庫中的字段值,其顯示內容隨記錄指針的變化而變化。它的DataField屬性指定要顯示內容的字段名稱。

4 DBEdit組件。用於顯示、修改數據表字段值。由於DBEdit一般用來修改或添加新記錄使用,所以其ReadOnly屬性一般設定為False,若設定為True則不可修改字段內容。

5 DBMemo組件。主要用於顯示和編輯數據庫表中的大二進制(BLOB)類型的字段值,一般用來處理備注型字段的值,能夠顯示多行文本。MaxLength屬性設置該屬性的值用於限制用戶向DBMemo 組件中輸入字符的個數。若設置該值為0時,表示輸入字符的個數沒有限制。注意:在運行過程中,用戶對DBMemo組件中顯示的文本信息是不能夠進行剪切、拷貝和粘貼操作的。由於DBMemo組件中包含着大量的文本信息,當指針移動時要更新顯示其中的信息需要花費很多的時間,用戶可以通過AutoDisplay屬性來控制是否自動顯示表中的備注型字段。當AutoDisplay設置為False時,在DBMemo組件中只顯示其對應表中的字段名而不顯示字段中的文本信息,用戶如果想瀏覽字段中的文本信息,用鼠標左鍵雙擊DBMemo組件的內部即可;當設置AutoDisplay屬性為True時,在DBMemo組件中會自動地顯示其對應數據庫表中的字段值。

6 DBImage組件。與DBMemo組件類似,它是用來顯示和編輯數據庫表中的BLOB類型的位圖圖像字段的。DBImage的ReadOnly屬性值若設定為False,就允許用戶對位圖圖像進行編輯,如將圖像剪切或拷貝到剪帖板上或從剪帖板上粘帖到DBImage組件中等操作。

7 DBListBox組件。用來當用戶修改字段值時顯示一個字段值列表供用戶選擇。在運行過程中,用戶單擊其中的可選項可以為DBListBox 組件對應的字段賦值,用戶不能自己從鍵盤上輸入一個列表框中不存在的字段值。

8 DBComboBox組件。可以認為它是DBEdit組件和DBListBox組件的合成,DBComboBox的可選項也是在設計階段由程序設計人員設計的。當用戶修改當前記錄中的字段時,可以直接輸入新的字段,也可以打開下拉式列表框選擇其中的一個可選項(受Style屬性的限制)。Sorted屬性決定列表框中的可選項是否按字母的排列順序排序。 技巧:DBComboBox組件和ComboBox組件有類似的智能查找功能:當用戶在編輯框中輸入一個字符或漢字后,打開下拉框,會自動移到與第一個字符相同的選項處,依次下去,用戶一般只需輸入少量的幾個字符就可以找到相應的選項。這在選項比較多的情況下非常有用。當然,Sorted屬性必須設定為True,否則可能會找不到所需的選項。

9 DBLookupListBox組件。該組件提供多個可選項,但這多個可選項是從相關的其它數據庫表中讀取的,不是設計時手工輸入的,這是其特點。ListSource屬性指明DBLookupListBox組件列表選項的數據源,這是非常重要的,否則DBLookupListBox組件不知道從何處去獲取數據充填列表框。 一般放置DataSource組件和其相連。ListField屬性指定要充填列表框的數據字段,可以一次列出多個字段的內容,但只能選擇一個字段的內容去給和DBLookupListBox組件指定的字段賦值,所以必須指定關鍵字段KeyField。 KeyField屬性 和ListField屬性相配合使用,指明選擇列表中的哪個字段內容為DBLookupListBox組件指定的字段(DataField屬性指定)賦值,如果列表中只有一個字段,那么KeyField和ListField應相同。KeyField 屬性必須指定,此屬性允許一次設定多個字段,每個字段之間用分號隔開即可。使用多個列表字段的好處在於,用戶在選擇KEY字段內容的同時,可以了解有關的其他信息。

10 DBLookupComboBox組件。此組件結合了DBEdit組件和DBLookupListBox組件的功能,用戶可以直接向該組件中輸入字段值,也可以從下拉式列表框中選擇一個可選項,只是下拉式列表框中的可選項是從相關的其他數據庫表中讀取來的。其屬性設置可參考前面的DBComboBox和DBLookupListBox組件。

注意:上面的四個組件DBListBox、DBLookupListBox 、DBComboBox、DBLookupComboBox只能與Table組件配合使用,而不能與Query組件配合使用。

11 DBCheckBox組件。一般用來和數據表中布爾型字段相連。這樣一來用戶就不必要再輸入True/False了,用起來比較方便。它和CheckBox組件的區別在於:DBCheckBox組件必須和數據表中的布爾型字段相連,而CheckBox的數值在程序中給出。

12 DBRadioGroup組件。和某個字段相連,此字段值只能為DBRadioGroup組件的固定數值之一(由用戶選擇),用戶只能選擇一個選項。其Items屬性雙擊可打開選項名稱編輯器,在這里輸入選項的標題。&#118alues屬性雙擊打開選項對應的數據編輯器,這里輸入的數據和前面的Items對應,當用戶選擇第一個選項時,就會從&#118alues列表選擇第一個數據充填到相應的字段。注意:如果沒有給出&#118alues屬性,那么Items標題就作為數據傳遞給相應的字段。

13 DBRichEdit組件。和DBEdit組件是一樣的,只不過它連接的字段必須是RichText文本格式。DBRichEdit組件沒有提供對RichText文本的格式化功能,要想修改文本格式應用程序必須自己來做。當文本格式變化而不是文本本身改變時,應用程序必須明確地將數據源控件的Edit屬性置為True,否則無法保存變化后的結果。

14 DBCtrlGrid組件。是很有趣的一個組件,它允許同時開多個面板窗口對記錄進行顯示、修改,而且這些記錄是不相同的,是連續的幾個記錄(用戶設定),用戶可同時對多個記錄進行修改。ColCount屬性指定有幾列,RowCount屬性指定有幾行。Orientation屬性有兩個值供選擇: GoHorizontal—滾動條出現在水平方向,GoVertical—滾動條出現在垂直方向。使用用方法:放置一個DBCtrlGrid組件后,在其“活動”面板(即圖中表面光滑沒有條紋的左上角面板)中放置數據瀏覽組件如DBEdit等。只能在活動面板上放組件,其它面板無法放置,運行后每個面板上都會有和活動面板相同的界面。再通過ColCount、RowCount來設定面板的行列數,用Orientation屬性設定好滾動條的位置就可以使用了。注意:在滾動條移動時或在面板之間轉移焦點時都會自動保存數據。滾動條兩端的箭頭每按一次和在滑塊與箭頭之間的空白處單擊鼠標移動的記錄數是不一樣的。前者移動一列或一行,后者移動一個屏幕的記錄數。

15 DBChart組件。和Chart組件幾乎完全一樣,只不過是多了一個功能,就是從數據表中獲得數據來制做圖形。使用方法:在界面中放置數據集、數據源組件后,放置DBChart組件,雙擊打開設定界面,和Chart組件不同之處在於在Series選項下,DataSource選項下拉列表中有一項為DataSet,選中后下面會出現數據表選擇項,然后在Lables、X、Y中可選擇相應的數字字段用來做圖。

技巧之一:在DBGrid 中實現類DBComboBox列表方法

要實現的功能:在DBGrid網格中輸入字段時,單擊字段可出現一個下拉列表(類似於DBComboBox),用戶可從中選擇需要的字段內容,列表框中是固定的幾個選項如男、女等。

實現方法舉例:假如數據表中有一個“性別”字段,我們讓這個字段具有下拉列表功能。在窗體上放置Table、DataSource、DBGrid組件各一個,將三者搭配起來,不用多講吧。 雙擊DBGrid1, 在彈出的Editing DBGrid1.Columns窗口中,單擊Add all Fields 按鈕, 將Table1的所有字段添加到DBGrid1中。在Editing DBGrid1.Columns窗口,單擊選擇一個字段如“性別” ,在Object Inspector窗口中, 單擊PickList屬性后的省略號,在Strings list editor窗口中輸入兩行,分別為“男”、“女” ,關閉Strings list editor窗口。 將Table1的Active屬性設定為True,然后運行程序,鼠標單擊DBGrid1中某個記錄的性別字段,將會出現一個下拉列表,列表中選項為“男”、“女”,從中選擇一個就可以了,也可以手工輸入字段內容

技巧之二、在DBGrid 中實現類DBLookUpComboBox列表的方法。

技巧一中的方法適用於選項比較少的字段的表格輸入,如果有上千種商品名稱,手工輸入顯然是不合適的,這時我們使用查找字段來實現。下拉列表的內容來自另外一個數據表的相應字段值,比如來自事先制做好的商品名稱數據表。

實現方法:在上面例子的基礎上,再添加一個數據集組件Table2,設定其table屬性為商品名稱數據表。雙擊Table1, 在彈出的Form1.Table1窗口中,鼠標右鍵單擊彈出快捷菜單,選擇 Add All Fields菜單項,將所有的字段添加,也可選擇部分字段,單擊“OK”按鈕返回。在Form1.Table1窗口中,單擊鼠標右鍵,從快捷菜單中選擇“New field”,在“New field”窗口中,添加一個新的查找字段,設定其Name屬性如“spmc”,類型為String。選擇其“Field Type”為“LookUp”。在“Field Definition”中設定如下:Key Field選擇“商品名稱”,此字段是一漢字為字段名的字段,是Table1中的字段。在DataSet中選擇“Table2”,在LookUp keys中選擇spmc,此字段的內容是商品名稱,是Table2中的字段。Result Field選擇 spmc。設定好上述選項后,單擊“OK”按鈕返回Form1.Table1窗口。在Form1.Table1窗口中,鼠標單擊選擇“商品名稱”字段,在Object Inspector 窗口中設定其Visible屬性為False。為的是讓新增的查找字段spmc來代替它。在Form1.Table1窗口中,鼠標單擊選擇“spmc”字段,在Object Inspector 窗口中設定其DisplayLabel屬性為“商品名稱”,讓其代替“商品名稱”字段。將Table1的Active屬性設定為True,然后運行程序,鼠標單擊DBGrid1中某個記錄的商品名稱字段,將會出現一個下拉列表,列表中選項為所有的商品名稱,這些葯品名稱來自Table2的數據表,但不能手工輸入商品名稱。

上面兩種方法的不同之處在於:用PickList屬性設置的下拉列表,在DBGrid中可手工輸入下拉列表中沒有的數值,適用於較少的選擇項。用查找字段的方法得到的下拉列表在DBGrid中不能手工輸入下拉列表中沒有的數值,適用於較多的選擇項


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM