起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 468|回复: 21

【搞定】[请求]datetimepicker影响不到子查询**

[复制链接]
发表于 2007-6-14 15:57:59 | 显示全部楼层 |阅读模式
我原来用了两个datetimepicker来过滤时间范围,
运行已经成功了,
不在时间范围内的数据都会被过滤掉,
但当时datagrid的多表查询sql语句没有写好,
查询出来的数据不正确。

原来的sql语句大致是这个样子
select a,b,c from table1,table2 where (... and ... or ...) group by a,b

后来我改进了sql语句,大致如下
select a,b,c=(select sum(x) from table2 where ... and ...),
          d=(select sum(y) from table3 where ... and ...),
          e=(select sum(z) from table4 where ... and ...)
from table1,table2,table3,table4,table5,table6
group by a,b

数据是正确了,
但是因为用了子查询,
datetimepicker不起作用了,
不管是什么时间范围,
查询出来的都是全部结果
有什么解决的办法吗?

Pic_049.jpg

36.72 KB, 下载次数: 180

回复

使用道具 举报

发表于 2007-6-14 17:20:52 | 显示全部楼层
应该不会吧,你放到数据库上直接执行这个SQL,把日期直接写上去,看看结果对不
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-14 18:36:03 | 显示全部楼层
前面说的错了
只所以出错是因为,
我要过滤的两个时间字段条件没写到一起,
不过现在写到一起了,
还是有错,
查询不出结果了,
帮忙看一下,
这样写有什么问题?

   DateTimePicker1.Time := 0;
     if SysUtils.DateToStr(DateTimePicker1.Date)<SysUtils.DateToStr(DateTimePicker2.Date+1) then
     begin
     TSQLDataSet(DataSetBroker1.DataSet).SQLFilter := '(LDRQ >= ''' + SysUtils.DateToStr(DateTimePicker1.Date)+''''
      + ') and (LDRQ < ''' + SysUtils.DateToStr(DateTimePicker2.Date+1)+''''+') and (XSDDLDRQ >= ''' + SysUtils.DateToStr(DateTimePicker1.Date)+''''
      + ') and (XSDDLDRQ < ''' + SysUtils.DateToStr(DateTimePicker2.Date+1)+''''+')';
      TSQLDataSet(DataSetBroker1.DataSet).SQLFiltered := True;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-15 08:53:45 | 显示全部楼层
现在数据查出来了
不过sql语句还是有点问题
还要修改一下

可以结帖了
回复 支持 反对

使用道具 举报

发表于 2007-6-15 08:59:31 | 显示全部楼层
你再 TSQLDataSet(DataSetBroker1.DataSet).SQLFiltered := True 设置断点,看看 TSQLDataSet(DataSetBroker1.DataSet).SQLFilter   这个值是啥,
是你想要的条件马?如果是,把这个SQL放到数据库上执行看看有数据。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-15 10:08:16 | 显示全部楼层
我的sql语句还差一点点

select  商品编号,商品全名,库存数量,进货数量,销售数量,合计数量 = 库存数量 + 进货数量- 销售数量 from 商品信息表,进货表,销售表,库存表 where ....

而我要过滤的时间的两个字段来自进货表和销售表,
现在的问题是:
当进货或销售的数据为空的时候,
库存数量就不显示了
而实际上无论何时库存数量都是存在的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-15 10:40:51 | 显示全部楼层
现在改用Query了
功能倒是实现了
只是打开窗体时
datagrid是空的
不怎么美观
回复 支持 反对

使用道具 举报

发表于 2007-6-15 10:51:24 | 显示全部楼层
应TQuery还是TSQLDataSet是一样的,主要是SQL语句的问题

至于你7楼说的问题,可以设置DataGrid 的visible 属性为false,等查询有结果后,再设置为 True,这样就好些了,或者再增加一些其他的表现,例如图片等等,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-15 14:03:35 | 显示全部楼层
应TQuery还是TSQLDataSet是一样的,主要是SQL语句的问题

我写的语句几乎是完全一样的

TQuery之所以能正常实现,
是因为过滤时间的两个字段可以自由的写在Query1.CommandText里面,
而“select ... from 基本信息表 where ...; ”from后不用添加这两个字段所在的进货表和销售表,
因此库存的数据不会受影响;

而在TSQLDataSet里面,
则要写“select ... from 基本信息表,进货表,销售表 where ...; ”,
否则会提示过滤时间的字段无效,
因此当进货表或销售表没有符合条件的数据时,
库存的数据也显示不了。
回复 支持 反对

使用道具 举报

发表于 2007-6-15 15:05:13 | 显示全部楼层
没有理解,几乎是完全一样的 说明还是有不同,对吧,应该就是不同地方造成的吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-11 23:42 , Processed in 0.044423 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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