delphi 如何实现按日期查询(100分)

  • 主题发起人 主题发起人 xuchongliang
  • 开始时间 开始时间
X

xuchongliang

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库中表字段是日期型,如何实现在两控件datatimepicker显示的日期之间的查询
 
Select xxx From t
Where DateField Between FormatDateTim('yyyy-mm-dd', dtpB.date) and FormatDateTim('yyyy-mm-dd', dtpE.date)
 
select * from tabel where 日期>=#'+datetostr(datetimepicker1.date)+'# and 日期<=#'+datetostr(datetimepicker2.date)+'#
 
暂时不能加分,szhcracker的回答编译过不了,dtboyi的方法编译能过,执行时发生错误。
 
select * from tabel where 日期>=:a and 日期<=:b
parambyname('a').value := dtp1.date
parambyname('b').value := dtp2.date
 
如果是access 需要用 # 做定界符
delphi的parambyname ,得到的日期是 2008 4 14 这样的格式,所以要用formatdatetime ,
szhcracker给的是思路,你都看不懂,ai

给个完整的
zQry.sql.add('select xxx from t where datefield1 between ' + formatdatetime('yyyy-mm-dd',dtpb.date) + ' and ' + formatdatetime('yyyy-mm-dd',dtpe.date));

还看不懂的话,继续深入学习吧.
 
'Select xxx From t
Where DateField Between '''+DateTostr(dtpB.date)+''' and '''+DateTostr(dtpE.date)+''''
 
(((t.Tdate >:BeginDate) and (t.Tdate<:EndDate)) or ((t.Tdate=:BeginDate) and (t.Ttime>=:BeginTime))or ((t.Tdate=:EndDate) and (t.Ttime<=:EndTime)))
 
select * from tabel where 日期>=:a and 日期<=:b
parambyname('a').asdatetime:=datetimepicker1.date
parambyname('b').asdatetime:=datetimepicker1.date
 
注意ACCESS与MSSQL的区别,然后就是时间的格式化 .....
 
不格式化的都是错误的.
 
由于数据库里日期格式一般都有小时分钟秒,而控件传递的日期不包括小时,即使包括,也是过去日期的当前小时分钟秒,所以如果只是使用大于和小于查询,很可能查询出来的数据不正确,一般情况下查询都会忽略小时分钟秒,只要求精确到天即可。因此Delphi中sql语句这样写
var
Astrdate1,Astrdate2:string;
Asql:string;
begin
Astrdate1 := datetimestostr(datatimepicker1.date);
Astrdate2 := datetimestostr(datatimepicker2.date);
Asql :=' select * from Table1 '+
' where datediff(d,datefieldname,'+quotestr(Astrdate1)+')<=0 and '+
' datediff(d,datefieldname,'+quotestr(Astrdate2)+')>=0'
 
后退
顶部