我的困扰--怎样百分百保证日期字段的查询(100分)

  • 主题发起人 主题发起人 zhcg
  • 开始时间 开始时间
Z

zhcg

Unregistered / Unconfirmed
GUEST, unregistred user!
使用两个TDateTimePicker查询的条件
Query1.Close;
Query1.Sql.Clear;
Temp := 'select * from Events where Event_Date > ''' + DateToStr(DateTimePicker1.Date) + '''';
Temp := Temp + ' and Event_Date < ''' + DateToStr(DateTimePicker2.Date) + '''';
Query1.Sql.Add(Temp);
Query1.Open;
总是不能正常运行,在控制面板里改了日期格式后,有时还可以,请问各位仁兄,有没有简单
有效的方法,保证无误地实现日期字段的查询?
 
看你用什么数据库
如果用Access
则应写成 date>#MM/DD/YY#
你的datatimepicker.date的格式要做相应的改动
其它的数据库
写成 'date > 'mm/dd/yy' 或 "mm/dd/yy"
 
(1)
如果你用的数据库是SYBASE,SQL SERVER或其他大型数据库
Temp := 'select * from Events where Event_Date > CONVERT(DATETIME,"'' +DateTimePicker1.TEXT+ '")';
Temp := Temp + ' and Event_Date < CONVERT(DATETINE,"'+DateTimePicker2.TEXT+ ''')';
(2)还可以将日期作为参数传过去
Temp := 'select * from Events where Event_Date >:Event_date1';
Temp := Temp + ' and Event_Date < :Event_date2';
query1.sql.clear;
query1.sql.add(temp);
QUERY1.PARAMS.Clear;
QUERY1.Params.CreateParam(FTDATETIME,'Event_Date1',PTINPUT);
QUERY1.Params.CreateParam(FTDATETIME,'Event_Date2',PTINPUT);
QUERY1.ParamByName('event_date1').ASDATETIME:=datetimepicker1.date;
QUERY1.ParamByName('event_date2').ASDATETIME:=datetimepicker2.date;
.......
 
最有效的方法就是将数据库的时间和查询的值都转化为字符串形式
 
可以使用参数传递。不然会被那些''搞死。
我一向都是这样写的:
//在指定日期之间查询
with Query1 do
begin
Close;
Sql.clear;
Sql.add(' select * from Events ');
Sql.add(' where Event_Date >:s1 and Event_Date <=s2 ');
Params[0].AsDate:=DateTimePicker1.date;
Params[1].AsDate:=DateTimePicker2.date; //不用asdatetime,不会出错但查不出来!
open;
end;
 
多谢各位手指点。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
939
SUNSTONE的Delphi笔记
S
I
回复
0
查看
806
import
I
后退
顶部