使用Delphi可以方便而又快速地建立强大的数据库应用程序,Delphi的数据库应用
程序开发,无论是客户/服务器数据库还是本地数据库,必须用到组件(组件的英文为Component,有叫控件、元件、构件的,本文称组件)TDataSource和Ttable,其中Ttable组件中有多种过滤记录的方法,现用最简单例子分别说明。
---- 1.给字段设置限制值,过滤记录
---- 下面是Delphi4帮助中的一个例子,设置了数据表Table1中的"City"字段检索范围,即上限值和下限值。范围一旦被设定,在整个应用
程序执行过程中都是有效的。也可以调用CancelRange方法暂时使范围失效,以后需要范围生效时,可直接调用ApplyRange方法,而不需要再次设定范围的上下限。另外,可以调用EditRangeStart和EditRangeEnd的方法来改变范围的上下限。
with Table1 do
begin
SetRangeStart; { Set the beginning key }
FieldByName(''City'').AsString := ''Felton'';
SetRangeEnd; { Set the ending key }
FieldByName(''City'').AsString := ''Scotts Valley'';
ApplyRange; { Tell the dataset to establish the range }
end;
---- 需要特别说明的是,如果Table1是Paradox表或是dBASE表,在调用SetRangeStart,SetRangeEnd,ApplyRange,CancelRange等方法时,只能为Table1表中的索引字段或定义的索引指定相应的字段值,以设定检索范围,也就是说"City"字段必须是索引字段。另外要说明的是,KeyExclusive属性值为True时不包括边界值,为False时包括边界值,缺省为False。
---- 2.在OnFilterRecord事件中过滤记录
---- 例如要对某数据表(Table)的Degree字段进行"工程师"和"高级工程师"的数据过滤(或称筛选数据),可以通过下面的
程序具体实现。
unit Unit1;
interface
uses
Windows, Messages, SysUtils,
Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids, Db, DBTables, StdCtrls;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
Table1: TTable;//指定表,如Demo.db
DBGrid1: TDBGrid;//用于显示记录
Button1: TButton;//按下后TDBGrid
中显示所有"工程师"的记录
Button2: TButton;//按下后TDBGrid
中显示所有"高级工程师"的记录
Button3: TButton;//按下后TDBGrid
中显示全部记录
Button4: TButton;//按下后退出
程序 procedure Table1FilterRecord
(DataSet: TDataSet; var Accept: Boolean);
procedure AnotherFilterRecord
(DataSet: TDataSet; var Accept: Boolean);
//指定"高级工程师"的事件句柄
procedure OtherFilterRecord(DataSet: TDataSet;
var Accept: Boolean);//指定"工程师"的事件句柄
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Table1FilterRecord
(DataSet: TDataSet;
var Accept: Boolean);
begin
accept:=dataset[''degree'']=''总经理'';
//初始的过滤条件
end;
procedure TForm1.AnotherFilterRecord
(DataSet: TDataSet;
var Accept: Boolean);
begin
accept:=dataset[''degree'']=''高级工程师'';
end;
procedure TForm1.OtherFilterRecord
(DataSet: TDataSet;
var Accept: Boolean);
begin
accept:=dataset[''degree'']=''工程师'';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
table1.OnFilterRecord:=Otherfilterreco