根据日期时间查询?(50分)

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

xzhxu2006

Unregistered / Unconfirmed
GUEST, unregistred user!
Date1,Date2:DateTimePicker;
Time1,Time2:DateTimePicker;

Date1.Kind := dtkDate; Date2.Kind := dtkDate;
Date1.Date := '2006-11-13'; Date2.Date := '2006-11-13';
Time1.Kind := dtkTime; Time2.Kind := dtkTime;
Time1.Time := '00:00:00';Time2.Time := '23:59:59';

现在我要时间在TDBegin和TDEnd之间的内容,即
ADOQuery1.Sql.Text := 'Select * from abc Where Time Between TDBegin And TDEnd '
使得TDBegin的时间等于Date1+Time1;TDEnd的时间等于Date2+Time2
我是这样写的,但是出错
ADOQuery1.Parameters.ParamByName('TDBegin').Value := Date1.Date + Time1.Time;
ADOQuery1.Parameters.ParamByName('TDEnd').Value := Date2.Date + Time2.Time;
运行时TDBegin的时间为'2013-11-05 13:12:39',TDEnd的时间为'2013-11-05 13:12:40'
请问大虾该程序错在哪里??
 
高手帮帮忙,本人急着用!
谢谢!
 
应转换一下:
ADOQuery1.Parameters.ParamByName('TDBegin').Value :=DatetoStr( DateTimePicker1.Date)+ timetostr(DateTimePicker2.Time);
ADOQuery1.Parameters.ParamByName('TDEnd').Value := Datetostr(DateTimePicker3.Date) + timetostr(DateTimePicker4.Time);
 
adoquery1.ParamCheck := false;
 
好象还不行,用了DateToStr,TimeToStr 出错了,说使用了错误类型
 
很简单,再用一个TDateTimePicker(DateTimePickerTemp):
DateTimePickerTemp.Date:=Date1.Date;
DateTimePickerTemp.Time:=Time1.Time;
s:=datetimetostr(DateTimePickerTemp.DateTime);
showmessage(s);
 
Date1.Time := Time1.Time
Date2.Time := Time2.Time

ADOQuery1.Parameters.ParamByName('TDBegin').Value := Date1.DateTime;
ADOQuery1.Parameters.ParamByName('TDEnd').Value := Date2.DateTime;
 
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('select * from abc where Time between :a and :b');
adoquery1.paramebyname('a').asdatatime:=datatimepicker1.datatime;
adoquery1.paramebyname('b').asdatatime:=datatimepicker2.datatime;
adoquery1.open;
就可以了.而datatimepicker1,datatimepicker2是时间控件
 
我觉得一般都应该格式化一下,保险一些
Select *
From Table
Where DateB >= FormatDateTime('yyyy-MM-dd hh:mm:ss', datatimepicker1.DateTime) and
DateE <= FormatDateTime('yyyy-MM-dd hh:mm:ss', datatimepicker2.DateTime)

我一直都这么写,没出过错.
 
to sunnyfairy
如果修改了系统的日期或时间分隔符可能要出错吧
用Parameters保险
 
不好意思我刚才写错了 现更正.运行已通过.
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from abc where Time between :a and :b');
adoquery1.Parameters.ParamByName('a').Value:=trunc(DateTimePicker1.DateTime);
adoquery1.Parameters.ParamByName('b').Value:=trunc(DateTimePicker2.DateTime);
adoquery1.Open;
就可以了.而datatimepicker1,datatimepicker2是时间控件
 
Date1,Date2是显示日期的
Time1,Time2是显示时间的
要使得TDBegin 等于Date1的日期加Time1的时间
要使得TDEnd 等于Date2的日期加Time2的时间
楼上的几位都只用了Date1,Date2,而Time1,Time2都没用到
 
各位大虾帮帮忙
 
access必需用##指定时间,SQLSERVER不知道,ORACLE要用to_date(格式,时间)转换时间看看你用的是什么数据库吧
 
是SQL Server 2000啊
没别要用#的
 
将2006年5月9日朝前数,到第4天 (在本例中是5月5日)
Select * from T_item
where DateDiff(day, FAddDate , '2006-05-09') = 4
 
Date1,Date2是显示日期的
Time1,Time2是显示时间的
要使得TDBegin 等于Date1的日期加Time1的时间
要使得TDEnd 等于Date2的日期加Time2的时间
楼上的几位都只用了Date1,Date2,而Time1,Time2都没用到

各位大虾帮帮忙
 
来自:ANiDelphi, 时间:2006-11-14 19:57:07, ID:3622927
to sunnyfairy
如果修改了系统的日期或时间分隔符可能要出错吧
用Parameters保险

不会错吧,和系统时间格式应该没有关系吧.
 
多人接受答案了。
 
后退
顶部