<font color=red>时间。。时间</font>的查询(100分)

  • 主题发起人 主题发起人 千中元
  • 开始时间 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
想从两个TDateTimePicker之间选择时间,但是Select以后,Adoquery1中没有数据。。
if Radiobutton2.Checked and RadioButton4.Checked then
Begin
AdoQuery1.SQL.add('select * from ws_order_01 where dorderdate>=:BeginTime and dorderdate<=:EndTime and state=''N''');
AdoQuery1.Parameters.ParamByName('BeginTime').value:=DateTimePicker1.Date;
AdoQuery1.Parameters.ParamByName('EndTime').value:=DateTimePicker2.Date;
End;
dorderdate 是Sql server中的datetime类型,里面的数据是如同“2000-9-14 10:19”的形式。
而DateTimePicer1.date的值是如同“200-9-14"的形式。不知道是否是因此
 
在Sql Server中日期时间是要加引号的。
 
试试看DateTimePicker2.Datetime
 
whsunbin兄,如上该如何改呢?
散光兄,先用datetime不行才改的date。。。
 

AdoQuery1.SQL.add('select * from ws_order_01 where dorderdate>=:BeginTime and dorderdate<:EndTime and state=''N''');
AdoQuery1.Parameters.ParamByName('BeginTime').value:=Trunc(DateTimePicker1.Date);
AdoQuery1.Parameters.ParamByName('EndTime').value:=Trunc(DateTimePicker2.Date)+1;
 
试试
AdoQuery1.Parameters.ParamByName('BeginTime').asdatetime:=DateTimePicker1.Date;
AdoQuery1.Parameters.ParamByName('EndTime').asdatetime:=DateTimePicker2.Date;
 
最好用SQL SERVER的DateDiff函数。
 
1)用 asXXX
[Error] save.pas(72): Undeclared identifier: 'asdatetime'
是行不通的了
2)trunc 以后,要inttostr(trunc())才匹配类型,不过也没有数据:(
3)那个DateDiff,直接DateDiff(dorderdate)这样用不知道行不行。。试验中。。
 
如果用datediff函数,可以在Delphi里这样写——
AdoQuery1.Sql.Text := 'select * from ws_order_01 where datediff(day,dorderdate,convert(datetime,'''
+ FormatDateTime('YYYY-MM-DD', DateTimePicker1.Date) + ''',20))<=0 and '
+ ' datediff(day,dorderdate,convert(datetime,'''
+ FormatDateTime('YYYY-MM-DD', DateTimePicker2.Date) + ''',20))>=0 and state=''N''';
 
将时间转换为字符串处理,datetimetostr,就可以查询了
 
我测试了一下用下面的方式可以取得数据,你检查一下你的其他条件是否有误。
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.add('select * from test where datetest>=:BeginTime and datetest<=:EndTime');
AdoQuery1.Parameters.ParamByName('BeginTime').value:=DT1.Date;
AdoQuery1.Parameters.ParamByName('EndTime').value:=DT2.Date;
AdoQuery1.Open;
 
sorry,Asxxx is used in TQuery,
I don't know it can't use in TAdoQuery
 
用formatdate函数将格式补齐。
 
哎呀,好不容易能发帖子了。刚才是漏了一个条件,所以造成没有数据。
不过无心插柳,多学了好多东西,谢谢先。
现在用date,比如想通过DateTimePicker1 和DateTimePicker2选择了从
2000-11-3到2000-11-29号的数据,但是得到的是2000-11-4号到2000-11-29号的数据。
我怀疑是因为date得到的时间是2000-11-3 24:00:00造成的。
改用datetime,还是得到从11-4号开始的数据。难道要用户选择11-2号?好像不符合用户
使用习惯:(
 
你将DateTimePicker的Time属性该过来不就可以了。
DateTimePicker的Time属性的默认值是你将DateTimePicker放到Form中的时间。
 
问一下你的数据库字段是日期型还是日期时间型?
我看你的程序没啥问题。
或许日期查询值用#试一试。
 
呵呵,将你的datatimepicker的time清空
 
多人接受答案了。
 
在 delphi 和 SQL Server 中,时间都是用实数来表示。
但同样一个数字,在 SQL Server 和 Delphi 中代表的时间
是不同的。

如 36893.752831597223,
在SQL Server 中为 2001-01-04 18:04:04.650,
select convert(datetime,36893.752831597223)

而在 delphi 中为 2001-01-02 18:04:04
edit1.Text :=datetimetostr(36893.752831597223);

个中原因我也不知道。
 
在 delphi 和 SQL Server 中,时间都是用实数来表示。
但同样一个数字,在 SQL Server 和 Delphi 中代表的时间
是不同的。

如 36893.752831597223,
在SQL Server 中为 2001-01-04 18:04:04.650,
select convert(datetime,36893.752831597223)

而在 delphi 中为 2001-01-02 18:04:04
edit1.Text :=datetimetostr(36893.752831597223);

个中原因我也不知道。
 
后退
顶部