Delphi基础学习

本文介绍了在Delphi中使用TADOTable组件进行模糊过滤时遇到的问题,包括FilterObjects属性在SQL2005 Express上不支持的情况,以及Filter属性中星号(*)和百分号(%)的使用疑惑。文中提到了可能的Delphi bug,并分享了使用Filtered属性代替SQL where语句以提升查询性能的经验。

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

2008-10-23 星期四

使用TADOTable组件模糊过滤:

1、使用FilterObjects属性设置过滤方式:

  1. //*************************************
  2. //* FilterObjects(TDataSet)属性原型:
  3. //*************************************
  4. Unit DB
  5. type
  6.   TFilterOption = (foCaseInsensitive, foNoPartialCompare);
  7.   TFilterOptions = set of TFilterOption;
  8. property FilterOptions: TFilterOptions;
  9. //*************************************
  10. //* 其中foCaseInsensitive表示忽略字母大小写,
  11. //* foNoPartialCompare表示不可以局部匹配,即
  12. //* 把Filter字符串中的星号(*)当成一个字符,否
  13. //* 则当成一个掩码字符。
  14. //*************************************
  15. //*************************************
  16. //* 演示使用FilterObjects属性设置过滤方式
  17. //*************************************  
  18.   with DM.adotDemo do
  19.   begin
  20.     Filtered := False;
  21.     Filter := sFilter;  //Filter过滤字符串,例如:Company='*S*'
  22.     if rbNoPartialCompare.Checked then
  23.     begin
  24.       FilterOptions := FilterOptions + [foNoPartialCompare];
  25.     end
  26.     else
  27.     begin
  28.       FilterOptions := FilterOptions - [foNoPartialCompare];
  29.     end;
  30.     Filtered := True;
  31.   end;

在SQL2005 Express数据库上结果报错:"FilterObjects are not supported!",后来在db数据库上编译通过

猜测:SQL2005 Express不支持这种语法

ps:Filter属性中,将星号(*)放在字符串首位,有时支持,有时报错,怀疑是Delphi的bug

2、使用Filter属性中的like操作符和百分号(%)掩码过滤:

  1.   with DM.adotBook do
  2.   begin
  3.     if cbNoPartialCompare.Checked then
  4.     begin
  5.       sFilter := sFilter + '=' + QuotedStr(edtKey.Text);
  6.     end
  7.     else
  8.     begin
  9.       sFilter := sFilter + ' like ' + QuotedStr('%' + edtKey.Text + '%');
  10.     end;
  11.     Filtered := False;
  12.     Filter := sFilter;
  13.     Filtered := True;
  14.   end;

ps:同样的,在过滤字符串首位加百分号(%),有时通过,有时报错,网上说是Delphi的bug,要安装一个补丁,有些D版不能打,待证实!

经验总结:使用ADOTable的Filtered代替SQL的where语句查询,可以增加查询性能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值