DBEditEh1与DBGRIDEH组合怎么对DBGRID进行筛选?

mosony 2015-08-10 02:36:09
在下图中客户代码处(DBEditEh1控件)输入25, 下面DBGRID(DBGRIDEH控件)中的客户代码为25的这一行就筛选出来了,其它的客户代码显示不出来,比如图中的61的那两行就隐藏了。
我是新手,在自学中,请高人指点。 最好有源代码,及在哪一个事件中写?
...全文
150 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
mosony 2015-08-11
  • 打赏
  • 举报
回复
引用 10 楼 yangb0803 的回复:
既然你都已经用了查询,那就可以不用再过滤了.

var
str : string ;
i : string;
Query : TADOQuery;

begin

str := DBEditEh1.Text;
Query := TADOQuery.Create(nil);
Query.Connection := dmWarehouse.ACWarehouse ;
Query.SQL.Text := 'select * from pro_zhizuomx where 客户代码 =''' + str + '''' ;
query.Open;
//绑定数据

DBGRIDEH.DataSource := datasource1 ;
datasource1.dataset := Query;
end;

按照这个, 的确是解决了筛选的问题。 但新的问题出来了,删除EDIT里的查询字段后,DBGRID里的内容也不见了,我想要的是,删除EDIT里的字段后,DBGRID里又是整个数据库的内容。 我试了一下, 需要重新输入DBGRID里的客户代码里有的字段,才会又显示出来。
lyhoo163 2015-08-11
  • 打赏
  • 举报
回复
var Query : TADOQuery;
    SQL.s:string;
begin
  S :=  DBEditEh1.Text;
  Query := TADOQuery.Create(nil);
  SQL:='select 字段1,字段,... from 表名 where 客户代码 ='+#39+S+#39+' order by ''客户代码''';
  Query.Connection := dmWarehouse.ACWarehouse ;
  Query.SQL.Text := SQL;
  Query.Open;
  ......
end;
举例说明。
lyhoo163 2015-08-10
  • 打赏
  • 举报
回复
还是使用SQL语句进行选择比较好。一是清淅,二是可以加入order by实行排序,三是可以指定选择字段。灵活又方便。
道玄希言 2015-08-10
  • 打赏
  • 举报
回复
既然你都已经用了查询,那就可以不用再过滤了. var str : string ; i : string; Query : TADOQuery; begin str := DBEditEh1.Text; Query := TADOQuery.Create(nil); Query.Connection := dmWarehouse.ACWarehouse ; Query.SQL.Text := 'select * from pro_zhizuomx where 客户代码 =''' + str + '''' ; query.Open; //绑定数据 DBGRIDEH.DataSource := datasource1 ; datasource1.dataset := Query; end;
wqz7436 2015-08-10
  • 打赏
  • 举报
回复
或者SQL语句改为: Query.SQL.clear; Query.SQL.add('select * from pro_zhizuomx where [客户代码] like ‘+#39+'%'+edit.text+%+#39); 如数据库的字段名称不是 [客户代码] ,相应修改。 如采用SQL查询,代码应写在查询按钮的Onclick事件中。
wqz7436 2015-08-10
  • 打赏
  • 举报
回复
在EDIT里的onchange事件中写: DBEditEh1.DataSource.DataSet.Filter := ' [客户代码] like '+#39+'%'+edit.text+'%'+#39;
mosony 2015-08-10
  • 打赏
  • 举报
回复
引用 6 楼 mosony 的回复:
[quote=引用 4 楼 yangb0803 的回复:]

var
str : string ;
i : string;
Query : TADOQuery;
begin

Query := TADOQuery.Create(nil);
Query.Connection := dmWarehouse.ACWarehouse ;
Query.SQL.Add('select * from pro_zhizuomx where 客户代码 =:客户代码');
query.Open;

str := DBEditEh1.Text;
i:= query.fieldbyname('客户代码').asstring;

DBEditEh1.DataSource.DataSet.Filtered := false ;
DBEditEh1.DataSource.DataSet.Filter := ' i = '' ' + str + ' '' ' ;
DBEditEh1.DataSource.DataSet.Filtered := true ;
end;




我是写在EDIT里的onchange事件中的。 还是出错, 见图片中的。 帮看下是哪里的问题
mosony 2015-08-10
  • 打赏
  • 举报
回复
[quote=引用 4 楼 yangb0803 的回复:]

var
str : string ;
i : string;
Query : TADOQuery;
begin

Query := TADOQuery.Create(nil);
Query.Connection := dmWarehouse.ACWarehouse ;
Query.SQL.Add('select * from pro_zhizuomx where 客户代码 =:客户代码');
query.Open;

str := DBEditEh1.Text;
i:= query.fieldbyname('客户代码').asstring;

DBEditEh1.DataSource.DataSet.Filtered := false ;
DBEditEh1.DataSource.DataSet.Filter := ' i = '' ' + str + ' '' ' ;
DBEditEh1.DataSource.DataSet.Filtered := true ;
end;
道玄希言 2015-08-10
  • 打赏
  • 举报
回复
过滤的方式, 一般比较适合数据库表中数据不怎么变化的情况,如果数据变化,你这里最好还是用查询 將条件直接带入到查询语句中, 通过查询返回需要的结果比较实时点。
道玄希言 2015-08-10
  • 打赏
  • 举报
回复
我的意思是,你DBGRIDEH绑定的数据源中,这些字段,都有个字段名的吧? 这里的过滤,也就是操作数据源, 对数据源进行过滤。 就你的图例, 是要过滤客户代码,找出客户代码为指定值的数据,对吧。 可以直接在 DBEditEh1 的 KeyDown 事件里面响应键盘的录入,回车后,显示过滤结果: var str : string ; begin if key = VK_RETURN then begin str := DBEditEh1.Text; DBEditEh1.DataSource.DataSet.Filtered := false ; DBEditEh1.DataSource.DataSet.Filter := ' 客户代码 = '' ' + str + ' '' ' ; DBEditEh1.DataSource.DataSet.Filtered := true ; end; end;
mosony 2015-08-10
  • 打赏
  • 举报
回复
引用 1 楼 yangb0803 的回复:


  DBEditEh1.DataSource.DataSet.Filtered := false ;
  DBEditEh1.DataSource.DataSet.Filter := '客户代码 = ''25'' ' ;
  DBEditEh1.DataSource.DataSet.Filtered := true ;

客户代码 替换成你客户代码对应的字段名。
我图中25只是一个例子, 有可能是DBGRID中客户代码中的任何一下。 “客户代码 替换成你客户代码对应的字段名。” 不知这个字段名指的是DBEditEh1, 还是DBGRIDEH里的?我是菜鸟, 望一一指教。
mosony 2015-08-10
  • 打赏
  • 举报
回复
我图中25只是一个例子, 有可能是DBGRID中客户代码中的任何一下。 “客户代码 替换成你客户代码对应的字段名。” 不知这个字段名指的是DBEditEh1, 还是DBGRIDEH里的?
道玄希言 2015-08-10
  • 打赏
  • 举报
回复


  DBEditEh1.DataSource.DataSet.Filtered := false ;
  DBEditEh1.DataSource.DataSet.Filter := '客户代码 = ''25'' ' ;
  DBEditEh1.DataSource.DataSet.Filtered := true ;

客户代码 替换成你客户代码对应的字段名。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧