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的这样所有行。
...全文
338 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'
源码链接: https://pan.quark.cn/s/0f7c75cb3aad ### MIPI Video Mode 与 Command Mode 的差异 #### 一、引言 MIPI (Mobile Industry Processor Interface) 是一种用于连接移动设备处理器及其外围设备的标准化接口。MIPI 接口支持多种协议,其包含 DSI (Display Serial Interface) 和 DCS (Display Control Interface) 等协议。在 MIPI 接口的应用,主要涉及两种工作模式:Video Mode(视频模式)和 Command Mode(命令模式)。本文旨在系统性地阐述这两种模式的工作机制、特性以及实际应用环境。 #### 二、LCD RAM 概念说明 在进一步探讨 MIPI 的两种模式之前,有必要对文提及的“LCD RAM”概念进行明确。实际上,“LCD RAM”并非一个通用术语,而是本文作者用来描述 LCD 控制器用于存储显示数据的内存区域。LCD(Liquid Crystal Display,液晶显示屏)通常配备一个控制 IC(Integrated Circuit,集成电路),该控制 IC 可能内置 RAM 以缓存显示数据。 #### 三、MIPI Video Mode(视频模式) **定义:** - 视频模式是一种类似于传统 RGB 接口的工作模式,它要求主机持续不断地向显示器传输刷新数据。 - 在这种模式下,数据和控制信号以报文的形式通过 MIPI 总线进行传输。 - 显示器本身无需配备帧缓冲器,因为主机会周期性地刷新屏幕。 **特点:** 1. **实时性高:** 主机需要不...
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 在电磁模拟技术,CST(Computer Simulation Technology)是一种被广泛采纳的软件工具,它主要用于电磁场、微波、天线以及射频系统的设计工作。本资料将详细分析CST软件离散端口的具体配置方法,这些方法对于提升仿真结果的精确度和专业水准具有决定性作用。离散端口在CST软件扮演着模拟信号输入或输出的重要角色,它们构成了仿真模型不可或缺的部分。在配置离散端口时,一个核心的原则是保证端口的方向与网格线保持一致,这是因为这样做能够有效降低计算过程产生的误差,并确保仿真数据的有效性。如果未能遵循这一指导原则,可能会引发未知的计算问题,进而导致仿真结果失去可靠性。 在CST软件配置离散端口,通常需要借助“Pick Points”这一功能。通过选择“Pick Edge Center”选项,端口将被设定在模型边缘的心位置上。然而,这种做法并不总是能够确保端口与网格线保持平行。在某些特定情形下,模型的几何构造可能不允许直接选取一个与网格线平行的边作为端口的安装位置。 为了克服这一挑战,可以采用多种不同的策略。如果模型本身已经包含一条与馈电口平行的边,那么可以直接利用这条边来建立端口,此时CST软件会自动调整端口使其与网格线对齐。另一种可选的方法是,当模型不具备现成的平行边时,用户可以手动构建一个几何结构,比如一个立方体,并使其边缘与馈电口平行。通过这种方式,新建立的几何结构的边缘就可以作为端口的位置,从而确保端口与网格线的平行关系。 在实施上述操作时,必须关注端口尺寸的合理性和物理意义的一致性。端口的尺寸应当依据实际天线馈电部分的尺寸进行适当调整,过大的端口或...

2,508

社区成员

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

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