ADOTable中Filter的用法

本文介绍了在操作数据集时,如何通过TTable和TQuery的Filter属性、ApplyRange、OnFilterRecord事件及TQuery控件的SQL语句等方式,对数据进行有效过滤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我们在操作数据集时,往往需要对数据进行筛眩例如:一个名为Customer的数据表,它具有CustNo、CustName、Country、Address、Phone、State、TaxRate等字段,如果只想查看国别为China或顾客号大于1000的顾客记录,就需要对数据集进行过滤。经总结,有下面这些过滤方法:
    一、利用TTable和TQuery的Filter属性
    1.在设计时设置Filter属性
    例如,设置Filter为:Country=′China′然后改变Filtered属性为True(注意,Filtered为True时过滤才有效)。则只能看到对应的Country字段内容为‘China’的记录。

    设置Filter时可以使用的操作符有:<、>、<=、>=、=、<>、AND、OR、NOT。
    例如,设置Filter为:CustNo>=1000andCustNo<=5000,则只能看到顾客号在1000与5000之间的顾客记录。
    2.在程序运行期间进行动态过滤
    要在程序运行时改变Filter属性,这包括两种情况:
    (1)操作符右边为常量,例如:Table1Filter:=′State′+′=′+′′′HI′′′;
   注意:字符串常量必须用三对单引号括起来。
    (2)操作符右边不为常量,可能是通过一个变量指定的值,或由一输入框给出的值。这时需要用到Format函数。其代码形式为:Table1Filter:=Format(′State′+′=′+′′′%S′′′,[StateValue]);其中StateValue为已经赋值的一个字符串变量,也可以为其他形式,例如:Edit1Text。

    二、用ApplyRange筛选数据集的记录
    执行下面这段代码,将只能看到顾客号在1000至5000之间的顾客记录。组成该例程的几个过程为:        
    ApplyRange,SetRangeStart,SetRangeEnd。
    Table1SetRangeStart;
    Table1[′CustNo′]:=1000;
    Table1SetRangeEnd;
    Table1[′CustNo′]:=5000;
    Table1ApplyRange;
    注意:该过程只适用于索引的字段。如果想基于非索引字段筛选,则不妨使用一点小花招:建立假索引。实现的方法为:Table1.IndexFieldNames:=字段名;Delphi还提供了简单的调用SetRangeStart、SetRangeEnd和ApplyRange的方法,例如:Table1.SetRange([Edit1.Text],[Edit2.Text]);

    三、用OnFilterRecord事件筛选OnFilterRecord事件允许按非键控字段建立筛选程序,例如:
  procedure TForm1.Table1FilterRecord(DataSet:TDataSet;varAccept:Boolean);
  begin
  Accept:=DataSet[′State′]=′CA′;
  end;
    四、用TQuery控件的SQL语句
    1.SQL语句中不包含变量和参数
  Select*fromCustomer
  WhereCustNo>=1000and CustNo<=5000
    2.SQL语句中包含参数
  Select*fromCustomer
  WhereCustNo>=:CustNo
  在运行期间给参数CustNo赋值。
     3.SQL语句中包含变量
      这时向TQuery控件添加SQL语句的代码应当这样写:

   Query1.Close;
   Query1.SQL.Clear;
   Query1.SQL.Add(Format(′Select*fromCustomer′+′′+′whereState=′+′′′%S′′′,[StateValue]));
   Query1.Open;在上面的四种方法中,第四种功能最强大,使用最灵活。

 

ADO (ActiveX Data Objects) 是一个用于访问数据的组件技术,可以连接多种数据源,并提供了一组可编程的对象,可用于访问和操作这些数据源。C++ Builder 中使用 ADO 也很方便,可以通过 ADOConnection、ADOTableADOQuery 等组件来实现。 下面是使用 ADOConnection、ADOTableADOQuery 的步骤: 1. 添加组件:在组件面板中找到 ADOConnection、ADOTableADOQuery 组件,将它们拖到窗体上。 2. 配置 ADOConnection:在对象查看器中选中 ADOConnection 组件,然后在属性面板中设置 ConnectionString 属性,以指定要连接的数据源类型和连接字符串。例如,连接 Access 数据库可以设置如下 ConnectionString: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyData\MyDB.mdb;Persist Security Info=False 3. 配置 ADOTable:在对象查看器中选中 ADOTable 组件,然后在属性面板中设置 Connection 属性为 ADOConnection1(即刚才添加的 ADOConnection 组件),设置 TableName 属性为要访问的表名。 4. 配置 ADOQuery:在对象查看器中选中 ADOQuery 组件,然后在属性面板中设置 Connection 属性为 ADOConnection1(即刚才添加的 ADOConnection 组件),设置 SQL 属性为要执行的 SQL 查询语句。 5. 运行查询:可以在代码中调用 ADOTable 的 Open() 方法或 ADOQuery 的 ExecSQL() 方法来执行查询,然后通过 ADOTableADOQuery 的 Fields 属性来访问查询结果。 下面是一个简单的示例代码,演示如何使用 ADOTable 来访问 Access 数据库中的一个表: ```c++ #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { ADOTable1->Open(); // 打开表 while (!ADOTable1->Eof) { // 遍历记录 ShowMessage(ADOTable1->FieldByName("Name")->AsString); ADOTable1->Next(); } ADOTable1->Close(); // 关闭表 } ``` 注意:上述示例中使用的 ADOConnection、ADOTableADOQuery 组件的名称可能与您的实际使用情况不同,需要根据您的组件名称进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值