TTable 是 TDataSet 的派生類,它是基於 BDE 數據庫引擎的數據集組件,也是一個較簡單的數據組件,可以直接從數據庫中獲取數據表的數據,只需設置連接的數據庫屬性(Database) 和所要獲取的數據表名稱(Tablename),所以對於簡單的應用來說,使用 TTable 是一種快速的方法。
TTable 常用屬性
Filter 屬性: 可以進行簡單的數據過濾(不要求有索引),也可進行復雜的動態數據過濾,只要在對象的 Filter 中輸入合適的“過濾條件”,將對象的 Filtered 屬性設為 True。
Delphi 提供了屬性 Filter, Filtered, Filteroptions 和事件 OnFilterrecord 來實現過濾器的功能。
- Filter:用於輸入過濾條件,其值為字符串類型,可以是個條件表達式。
- Filtered:默認為 False,表示過濾器關閉,如果設置為 True,就會執行過濾操作,引發 OnFilterrecord事件。
- Filteroptions:用於設置過濾器的兩個參數 FoCaseinsensitive 和 Fonopartialcompare。FoCaseinsensitive 表示過濾器對大小寫是否敏感。Fonopartialcompare 表示過濾器是否支持通配符(*)所表示的部分匹配。
procedure TForm1.Button3Click(Sender: TObject); begin Table1.Filtered:=True; Table1.Filter:='語文成績>60'; end;
TTable 常用方法
Locate:是TTable 最常用的數據搜索方法之一,可以根據一個或者幾個字段的值查找並定位記錄。返回結果為 False 說明沒有找到匹配記錄,為 True 說明找到匹配記錄。
方法聲明
function TBDEDataSet.Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean;
KeyFields:要搜索的字段名稱
KeyValues:字段要滿足的值
Options:要搜索的選項,是集合類型。LoPartialkey 表示是否使用通配符, LoCaseInsensitive 表示是否大小寫敏感.
// 單一字段搜索 procedure TForm1.Button1Click(Sender: TObject); begin if Table1.Locate(ComboBox1.Text, Edit1.Text, [loCaseInsensitive]) then ShowMessage('找到記錄') else ShowMessage('找不到記錄'); end; //多個字段搜索 procedure TForm1.Button2Click(Sender: TObject); begin if Table1.Locate(ComboBox1.Text+';'+ComboBox2.Text, VararrayOf([Edit1.Text, Edit2.Text]), [loCaseInsensitive]) then ShowMessage('找到記錄') else ShowMessage('找不到記錄'); end;
注:查詢多個字段時,需要使用";" 連接字段。
Lookup:也是TTable 最常用的數據搜索方法之一,只需指定所要搜索的字段名稱、搜索值及要返回的字段即可。數據搜索成功會以變量的數據類型返回指定的字段值,否則返回 Null 值。與 Locate 最大的不同在於 Lookup 並不會改變目前的數據指針。
方法聲明
function TBDEDataSet.Lookup(const KeyFields: string; const KeyValues: Variant; const ResultFields: string): Variant;
KeyFields:要搜索的字段名稱
KeyValues:字段要滿足的值
ResultFields:要返回的字段
當用戶直接使用 TTable 組件時,該組件使用默認的字段設置。若要改變 TTable 組件的字段設置,可以通過字段編輯器實現。在窗體上雙擊 TTable 組件后,便進入字段編輯器對這些字段分別進行編輯。
選擇字段編輯器中字段的常用屬性
Alignment:字段數據顯示的對齊方式
DisplayFormat:設置字段內的數據表示方式,若是數字類型的數據需要加上千元分隔符,則屬性值為#,###
DisplayLabel:設置該字段的標題名稱,默認為該字段名稱,當設置好特定的字段名稱后,所有使用該數據集的組件也會直接采用此新設的字段名稱
EditMask:當進入編輯模式時,設置該字段的編輯屏蔽,也就是可以限制用戶輸入的數據格式或數據內容
FieldName:設置該字段和數據表連接的字段,也就是指定該字段從數據表中哪個字段獲取數據
ReadOnly:分別設置每個字段的只讀與否
Visible:設置字段的顯示與否,若使用 TDBGrid 之類的控制組件相連時,則設置為 False 的字段將不會出現在 TDBGrid 組件的顯示畫面上。
字段編輯器特殊功能
字段編輯器的快速拖動
字段編輯器的快速拖曳可直接從字段編輯器中拖曳字段到窗體上使用,Delphi 會自動提供設置好的 TDBEdit 組件來顯示這些拖曳的字段,不需要再設置如 DataField 和 DataSource 之類的屬性, TDataSource 組件在拖曵中也一並增加在窗體中。
字段編輯器的計算字段
在字段編輯中除了對現有的字段進行編輯外,也可以根據現有的字段生成具有運算效果的新字段,這些字段能處理如匯總或幾個字段值相加的效果
字符編輯器的引用字段
除了計算字段外, TTable 組件的字段類型還支持引用 類型,也就是一個數據表中的字段數據可以引用另外一個數據表中的某個字段。因為引用字段必須引用另外一個數據表,所以在設置上與計算字段有些差別,其中主要的差別就在於引用數據表的設置,除了設置引用數據表外還必須指定兩者之間的對應關系,這些設置都是在選擇字段類型為 Lookup 完成的。
引用字段功能
DataSet:設置所要引用的數據集
Lookup Keys:引用數據集中被引用的字段,也就是根據這個數據字段和原本的數據集創建對應的關系
Result Field:對應關系創建后,要從引用數據集中顯示的數據字段
Key Fields:原來的數據集中用來和引用數據集創建對應關系的字段,所以該字段必須和 Lookup Keys 有對應關系
當添加的字段為 Calculated (計算字段)時,必須利用 onCalcFields事件處理新字段的計算問題。
procedure TForm1.Table1CalcFields(DataSet: TDataSet); var sum: Integer; begin sum:=DataSet.FieldByName('yuwenscore').AsInteger + DataSet.FieldByName('mathscore').AsInteger; DataSet.FieldByName('sum').AsInteger := sum ; end;
