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;