如何在时间段内检索相关内容?(50分)

X

xiaodou

Unregistered / Unconfirmed
GUEST, unregistred user!
我在开发一个程序,需要能够检索一段时间内的数据
数据库为SQL Server,其中一个字段‘日期’为Datetime类型
通过选择pDatetimePicker控件的时间确定查询区间的起始
想通过Query控件采用Sql语句实现,语句如下:
with query1 do
begin
active:=false;
databasename:='www';
sqlstring:=Queryform.combobox1.Items[QueryForm.combobox1.itemIndex];
sqlstring:='Select * From '+sqlstring;
SQL.Clear ;
SQL.Add(sqlstring);
//设置条件查询
sqlstring:='where 日期>'+datetostr(Datetimepickerfrom.DateTime)+' and 日期<'+datetostr(Datetimepickerto.DateTime);
SQL.Add(sqlstring);
active:=true;
end;
//注:“日期”为字段名称,数据库为SQL Server
但是无法查到相应内容,结果是内容为空
请问SQL语句有何问题,或是否有别的更好的方法?
 
把:datetostr(Datetimepickerfrom.DateTime)
改为:
formatdatetime('yyyy-mm-dd',Datetimepickerfrom.DateTime)
你试试看!
 
照楼上的方法试了,仍旧不行,
是否应将时间变量转换为整型变量才行,
如SQL Server 2000中的时间函数DATEPART(datepart,date).
请继续关注!
 
少加了引号:
datetostr(Datetimepickerfrom.DateTime)
改成
'''' + datetostr(Datetimepickerfrom.DateTime) + ''''


 
按dlnew所提方法,出错提示
SOL Server[ODBC]中无Datetostr函数
 
如果你只要精确到天,就取日期的整数部分,否则就用浮点数
Var
FromDate,EndDate:integer;
begin
FromDate:=Trunc(DateTimePicker1.Date);
EndDate:=Trunc(DateTimePicker2.Date);
With TQuery.Create do
begin
Sql.text:=Format('Select * from YourTable where DateField between %d and %d',[FromDate,EndDate]);
Prepare;
Open;
end;
end;
DateValue:=Trunc(DateTimePicker1.Date);
 
dlnew说的是对的,
把:sqlstring:='where 日期>'+datetostr(Datetimepickerfrom.DateTime)+' and 日期<'+datetostr(Datetimepickerto.DateTime);
改为:sqlstring:='where 日期>'''+datetostr(Datetimepickerfrom.DateTime)+' and 日期<'''+datetostr(Datetimepickerto.DateTime);

 
如tinyint所说进行修改,
sqlstring:='where 日期>'''+datetostr(Datetimepickerfrom.DateTime)+' and 日期<'''+datetostr(Datetimepickerto.DateTime);
SQL.Add(sqlstring);
active:=true;
运行后提示错误:
[Microsoft][ODBC SQL Driver]Line2: Incorrect syntax near '2002'.
 
with CustomerData.hkdj_ADOQuery do
begin
close;
Sql.Clear;
Sql.Add('Select * from bwk_cjrkdjb');
SQL.Add('where csrq>='''+DateToStr(DateTime1.Date)+''' and csrq<'''+DateToStr(DateTime2.Date)+'''');
Open;
end;
end
 
谢谢诸位,问题已解决,
tuatara的方法是可行的;
dlnew、tinyint的思想是对的,但语句还有一些问题,若改为如ty_unix的SQL语句即可,
sqlstring:='where 日期>'''+datetostr(Datetimepickerfrom.DateTime)+''' and 日期<'''+datetostr(Datetimepickerto.DateTime)''''


 
多人接受答案了。
 
顶部