delphi 中 dbgrideh连接sqlite数据库,怎么把某列的2个指定的数据过滤出来?

pxsisan 2019-11-23 12:02:35
第一个问题:dbgrideh控件连接sqlite数据库,假设数量这一列有5,2,2,3,4,5这样6个数据,怎么把这列中的2和3过滤出来?
过滤一个值的可以解决,方法是:fdquery1.sql.add('select * from table where 数量 ='+#39+ '2' +#39);
第二个问题:能不能在过滤时满足多个条件。例如:第一行(第一列5,第二列3);第二行(第一列5,第二列2);第三行(第一列4,第二列2)等等,只过滤出满足符合第一列5,第二列2的这样所有行。
...全文
297 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mh6438-QQ 2019-12-13
  • 打赏
  • 举报
回复
可以添加计算列,类似要显示在前的设为1,显示在后的设为2,不显示的设为0,再过滤0值,用计算列排序
mh6438-QQ 2019-12-13
  • 打赏
  • 举报
回复
selecct * from table where id=1 AND (周二=4 OR 周三=4 or 周四=4 or 周五=4)
pxsisan 2019-11-29
  • 打赏
  • 举报
回复
后来我用stringgrid控件解决了以上的要求。谢谢各位。
天行归来 2019-11-29
  • 打赏
  • 举报
回复
引用 13 楼 pxsisan 的回复:
结果是 listview第一行是1.2.3.4.5.6
ListView添加数据的条件你要根据自己需要改下。
  • 打赏
  • 举报
回复
引用 10 楼 pxsisan 的回复:
感谢楼上的几位大神不厌其烦的帮助。

[quote=引用 9 楼 早打大打打核战争 的回复:]
用SQL union:
select * from table where 周一=1 and (周二=4 or 周三=4 or 周四=4 or 周五=4 )
union
select * from table where 周一=1 and 周二<>4 and 周三<>4 and 周四<>4 and 周五<>4;

以上两行代码的效果跟select * from table where 周一 =1是一样的。达到的是周一不是1的数据行都不显示在dbgrideh表格里。

我所需要达到的目的还有一个要求就是周一=1的前提下,周二,周三,周四,周五任意一天是4的数据行显示在前面几行。后面才能显示周一是1,但周二,周三,周四,周五任意一天 不是 4的显示在之后几行。也就是需要有先后顺序,这样的效果怎么写代码?
delphi的重绘功能能否实现以上要求,能不能把先符合某一个条件的若干行数据行显示在bdgrideh上,接着显示符合另一个条件的某几行数据行在之后显示,依次类推,要求能控制前后顺序的。
[/quote]

用union all试一下:
select * from table where 周一=1 and (周二=4 or 周三=4 or 周四=4 or 周五=4 )
union all
select * from table where 周一=1 and 周二<>4 and 周三<>4 and 周四<>4 and 周五<>4;
pxsisan 2019-11-28
  • 打赏
  • 举报
回复

结果是

listview第一行是1.2.3.4.5.6
天行归来 2019-11-28
  • 打赏
  • 举报
回复
周一=1的前提下,周二,周三,周四,周五任意一天是4的数据行显示在前面几行。后面才能显示周一是1,但周二,周三,周四,周五任意一天 不是 4的显示在之后几行。也就是需要有先后顺序,这样的效果怎么写代码? 假如数据集data已获取情况下,数据在ListView展示,StringGrid类似:

var
  i: integer;
  item: TListItem;
begin
  data.First;
  while not data.Eof do
  begin
    if (data.FieldByName('周一').AsInteger=1) and (
        (data.FieldByName('周二').AsInteger=1) or
        (data.FieldByName('周三').AsInteger=1) or
        (data.FieldByName('周四').AsInteger=1) or
        (data.FieldByName('周五').AsInteger=1)
       ) then
     begin
       item := ListView1.Items.Insert(0);    //插入第一行
     end
     else begin
       item := ListView1.Items.Add;          //插入到最后一行
     end;
     item.Caption := '';//序号后续统一处理
     item.SubItems.Add(IntToStr(data.FieldByName('周一').AsInteger));
     item.SubItems.Add(IntToStr(data.FieldByName('周二').AsInteger));
     //TODO 添加其他天数据
     data.Next;
  end;
  //更新序号
  for i:=0 to ListView1.Items.Count-1 do
  begin
    ListView1.Items[i].Caption := IntToStr(i+1);
  end;
end;

pxsisan 2019-11-27
  • 打赏
  • 举报
回复
引用 8 楼 天行归来 的回复:
那就不能用数据感知控件,自己控制输出,比如 TListView、StringGrid等

具体怎么使用,能具体教一下吗?我是自己初学,谢谢帮助!
pxsisan 2019-11-27
  • 打赏
  • 举报
回复
感谢楼上的几位大神不厌其烦的帮助。

引用 9 楼 早打大打打核战争 的回复:
用SQL union:
select * from table where 周一=1 and (周二=4 or 周三=4 or 周四=4 or 周五=4 )
union
select * from table where 周一=1 and 周二<>4 and 周三<>4 and 周四<>4 and 周五<>4;

以上两行代码的效果跟select * from table where 周一 =1是一样的。达到的是周一不是1的数据行都不显示在dbgrideh表格里。

我所需要达到的目的还有一个要求就是周一=1的前提下,周二,周三,周四,周五任意一天是4的数据行显示在前面几行。后面才能显示周一是1,但周二,周三,周四,周五任意一天 不是 4的显示在之后几行。也就是需要有先后顺序,这样的效果怎么写代码?
delphi的重绘功能能否实现以上要求,能不能把先符合某一个条件的若干行数据行显示在bdgrideh上,接着显示符合另一个条件的某几行数据行在之后显示,依次类推,要求能控制前后顺序的。
  • 打赏
  • 举报
回复
用SQL union:
select * from table where 周一=1 and (周二=4 or 周三=4 or 周四=4 or 周五=4 )
union
select * from table where 周一=1 and 周二<>4 and 周三<>4 and 周四<>4 and 周五<>4;
天行归来 2019-11-26
  • 打赏
  • 举报
回复
那就不能用数据感知控件,自己控制输出,比如 TListView、StringGrid等
pxsisan 2019-11-26
  • 打赏
  • 举报
回复
https://img-bbs.csdn.net/upload/201911/25/1574690569_224579.png
我想要最终在dbgrideh上显示的是:周一必须是白菜的前提下,周二,周三,周四,周五任意一天是萝卜的数据行显示在前面几行。周一是白菜,但周二,周三,周四,周五任意一天 不是 萝卜显示在之后几行。周一不是白菜的数据行都不显示在dbgrideh表格里。
这样的效果怎么写代码?
  • 打赏
  • 举报
回复
select * from table where 周一=1 or 周二=4 or 周三=4 or 周四=4 or 周五=4 order by 周一;
lao_yunger 2019-11-24
  • 打赏
  • 举报
回复
'利用过滤筛选,能把周一是1,周二或周三或周四或周五为4的筛选出来 '>>>>selecct * from table where id=1 or 周二=4 OR 周三=4 or 周四=4 or 周二=4
pxsisan 2019-11-24
  • 打赏
  • 举报
回复
引用 1 楼 早打大打打核战争 的回复:
select * from table where 数量 =2 or 数量 =3;
select * from table where field1 =5 and field2 =2;
field1、field2是字段名,如果字段是字符型,5要加上单引号'5'

谢谢!
我的问题还蛮多,追问一下,如下表

利用过滤筛选,能把周一是1,周二或周三或周四或周五为4的筛选出来(即id为1和6的两条数据),可是其他剩下的四条不显示,原因是我用了过滤,现在我想让其他的4条也显示,只是1和6两天显示在第一行和第二行,其他的显示在后面,这个怎么实现?是不是能用排序?请各位大神指教
  • 打赏
  • 举报
回复
select * from table where 数量 =2 or 数量 =3;
select * from table where field1 =5 and field2 =2;
field1、field2是字段名,如果字段是字符型,5要加上单引号'5'

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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