Lazarus中文社区

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

QQ登录

只需一步,快速开始

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

請教有關過濾的問題

[复制链接]

该用户从未签到

发表于 2014-6-1 17:38:44 | 显示全部楼层 |阅读模式
请问一下,我一个EDIT,想要利用输入的资料把dbgird裡的资料做过滤,要怎麽做呢?

这个Edit只要输入'Name',dbgird裡的资料只会显示符合跟这个NAME相同的资料,我是这样写的:

  xName:=edit6.Text;
  dbfLnR.Filtered:=False;
  dbfLnR.Filter:= xName;
  dbfLnR.Filtered:=True;

可是一直出现这个画面(如图)


由于小妹是非常非常心的初学者,菜到不能在菜,可以请各位大大解决小妹的问题吗Q___Q
报告要交不出来了....TT

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册(注册审核可向QQ群索取)

x
回复

使用道具 举报

该用户从未签到

发表于 2014-6-2 08:41:53 | 显示全部楼层
你可以加入lazarus官方群(146204、34176611),必会给你满意的结果

点评

妹子你才这么积极的吧?  发表于 2014-6-4 08:12
回复 支持 反对

使用道具 举报

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

    [LV.3]偶尔看看II

    发表于 2014-6-2 08:46:35 | 显示全部楼层
    dbfLnR.Filter:= xName;
    你这里没有指明需要过滤的具体字段
    比如要得到Name字段里边等于XName的 dbfLnR.Filter:= 'Name = '''+XName+'''';
    如果要得到所有name字段里边包含XName的 dbfLnR.Filter:= 'Name like ''%'+XName+'%''';
    如果过滤的是日期型的字段,还需要再转换一下
    VDate:=FormatDateTime('yyyyMMdd',date);
    .Filter:='DTOS(Date) = '''+VDate+'''';
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2014-6-2 18:18:36 | 显示全部楼层
    那请问一下,我后来在OnCellClick那裡写:

    var xID, xFilter:string;
    begin
        xID:= dbfReader.FieldByName('ID').AsString;
        xFilter:= Format('ID=%s',[xID]);
        dbfLnR.Filtered:=False;
        dbfLnR.Filter:= xFilter;
        dbfLnR.Filtered:=True;
    end;

    可是还是一直跳出这个视窗(如图)
    我同学写这样:
        xReaderCon:= dbReaderManage.FieldByName('ReaderID').AsString;
        xFilter:= Format('ReaderID=%s',[xReaderCon]);
        dbReturnManage.Filtered:=False;
        dbReturnManage.Filter:= xFilter;
        dbReturnManage.Filtered:=True;

    他的可以正常运作,我的却不行,实在不知道该怎麽办ORZ
    还是我需要上传我的档案给大大看一下T____T

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册(注册审核可向QQ群索取)

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-6-4 08:21:29 | 显示全部楼层
    首先你的dbReturnManage是什么类型的组件? table还是query? 如果是table,把这个table的结构列出来,如果是query的把sql写出来。
    是不是先设置下index再作filter好点?

    仔细看了你的ID value,貌似是character类型,那Filter条件xFilter为什么没有引号呢??  除了数值类型的查询不需要,其他都需要的吧,印象中。。
    xFilter:= Format('ReaderID=%s',[QuotedStr(xReaderCon)]); //如果是字符类型,我觉得应该加上QuotedStr
    //
    另,你是想按ID查询吗??换我的话就不会用filter这种方法去做,直接用query写。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-6-4 15:34:15 | 显示全部楼层
    {
    xName:=edit6.Text;
      dbfLnR.Filtered:=False;
      dbfLnR.Filter:= xName;
      dbfLnR.Filtered:=True;

    }

    对初学者,首先要明确一个概念: 对所有显示组件(比如 DBGrid)的数据的操作,都不是对 DBGrid 操作,而应该是对 DBGrid --> DataSource --> DataSet 的这个 DataSet 来操作.

    那么,先确定, dbfLnR 在这里是一个 DataSet 吗? 比如,它应该是一个 TQuery 或者 TTable 之类的一个东西.

    OK,现在假设 dbfLnR 是一个 TDataSet 类的东东,对它做过滤处理,应该是:


    dbfLnR.Filtered:=False;
      dbfLnR.Filter:= 要过滤的字段的名字 = '你输入的要过滤的内容';
      dbfLnR.Filtered:=True;

    也就是说, Filter 是一个字符串,这个字符串的格式,应该是一个类似 SQL 语句的格式。如果要过滤的内容是整数,则不需要引号。如果是字符串,则需要引号。

    要过滤的内容如果是字符串,还可以做部分匹配的过滤,比如写成:

    要过滤的字段的名字  like '%要过滤的内容%'

    这样,只要字段内容里面有要过滤的内容,但前后还有其它字符,都能出来。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-3-1 22:40
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2014-11-29 19:57:00 | 显示全部楼层
    tigerA15 发表于 2014-6-4 08:21
    首先你的dbReturnManage是什么类型的组件? table还是query? 如果是table,把这个table的结构列出来,如果 ...

    dbf文件如何用sql?
    回复 支持 反对

    使用道具 举报

    *滑块验证:

    本版积分规则

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

    GMT+8, 2025-5-2 21:13 , Processed in 0.035346 second(s), 14 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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