Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 2933|回复: 4

DBGrid Filter 问题

[复制链接]

该用户从未签到

发表于 2014-7-22 10:22:12 | 显示全部楼层 |阅读模式
Lazarus‘ DBGrid Filter  在过滤Date 类型时该如何处理?似乎字段是日期类型时会报错。不知大家遇到过这个问题吗。

代码如下
procedure TForm1.MenuItem1Click(Sender: TObject);
var
  strFilter,strColName,strFilterCond:string;
  tField:TFieldType;
begin
strFilterCond:='';
if  ODBCConnection1.Connected=False then exit;
strFilter:= DBGrid1.DataSource.Dataset.Fields[DBGrid1.SelectedField.Index].AsString;
strColName:= DBGrid1.DataSource.Dataset.Fields[DBGrid1.SelectedField.Index].FieldName;
tField:=DBGrid1.DataSource.Dataset.Fields[DBGrid1.SelectedField.Index].DataType;
   case tField of
    ftString:
     strFilterCond:='('+ strColName +'='''+ strFilter +''')';
    ftDate,ftDateTime,ftTime:
      strFilterCond:='';
    // strFilterCond:= '('+ strColName+'=' + strFilter + ')';   //Date字段类型该如何处理?

   else
     strFilterCond:= '('+ strColName+'=' + strFilter + ')';
   end;

    //showmessage(strFilterCond) ;
    SqlQuery1.Filtered:=False;
    SqlQuery1.Filter:=  strFilterCond;
    SqlQuery1.Filtered:= True;

end;                  

回复

使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:19
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    发表于 2014-7-22 13:48:48 | 显示全部楼层
    用DTOS()函数转换,将转换后的字段当字符型看待。
    strFilterCond:= '(DTOS('+ strColName+')='''+ strFilter +''')';
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2014-7-22 15:36:21 | 显示全部楼层
    用DTOS()函数转换,将转换后的字段当字符型看待。
    strFilterCond:= '(DTOS('+ strColName+')='''+ strFilter +''')';

    后没有报错,但是也没有筛选出结果。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:19
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    发表于 2014-7-22 22:30:40 | 显示全部楼层
    本帖最后由 gucao 于 2014-7-22 22:44 编辑

    好吧 非常抱歉··我回答的不够完整。
    日期字段的过滤首先必须用DTOS()将字段名括起来,然后用来比较的值必须为yyyyMMdd或者yyyyMMdd HHmmss(我只用到这两种情况,其他没测试··)
    一般我在DTOS前先FormatDateTime
    再一个我filter的时候不加括号··
    另外TMemDataset不支持filter。
    再另外filter之后的数据量不等于filter后的dataset.recordcount
    我想这下应该没啥遗漏的了···
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2014-7-23 09:29:58 | 显示全部楼层
    楼上是正确的,Lazarus需要FormatDateTime 实现,Delphi 同样代码是不需要的。学习了。
    回复 支持 反对

    使用道具 举报

    *滑块验证:

    本版积分规则

    QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

    GMT+8, 2025-5-2 10:52 , Processed in 0.029300 second(s), 10 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表