补充:
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select time1 from table1');
query1.SQL.Add('where time1>='+' '+str1);
query1.sql.add('and time1<='+' '+str2);
query1.Open;
end;
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select time1 from table1');
query1.SQL.Add('where time1>='+' '+str1);
query1.sql.add('and time1<='+' '+str2);
query1.Open;
end;
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select time1 from table1');
query1.SQL.Add('where time1>='+#39+str1+#39);
query1.sql.add('and time1<='+#39+str2+#39);
query1.Open;
这样就OK了。
因为发送的SQL语句中对于日期型的在SQL中要加上单引号(#39)还有,你上面的两行代码有问题: str1:=datetostr(datetimepicker1.Date)+' '+maskedit1.Text;
str2:=datetostr(datetimepicker2.Date)+' '+maskedit2.Text;
应改为: str1:=datetostr(datetimepicker1.Datetime)+' '+maskedit1.Text;
str2:=datetostr(datetimepicker2.Datetime)+' '+maskedit2.Text;
query1.sql.add('and time1<='+' '+str2);
改为
query1.sql.add('where time1 between :date1 and :date2');
试试看
明白你的sql怎么回事了吗?
日期类型应该加#
query1.SQL.Clear;
query1.SQL.Add('select time1 from table1');
query1.SQL.Add('where time1>=:date1');
query1.sql.add('and time1<=:date2');
query1.ParamByName('date1').AsDateTime := date1;
query1.ParamByName('date2').AsDateTime := date2;
query1.Open;
先写一个函数:
function CreateGlobalTSQLString(ADateTime: TDateTime): string;
var
strDestDateTime: string;
begin
strDestDateTime := FormatDateTime('yyyy-mm-dd hh:mm:ss.zzz', ADateTime);
Result := 'CONVERT(DATETIME,''' + strDestDateTime + ''',20)';
end;然后在生成sql语句时这样写:
ADODataSet1.CommandText := 'SELECT * FROM 订单 WHERE 订购日期 BETWEEN '+
CreateGlobalTSQLString(DateTimePicker1.Date) + ' AND ' +
CreateGlobalTSQLString(DateTimePicker2.Date) + ' ORDER BY 订购日期';这样就不用考虑DateTimePicker的日期格式和库中日期字段的格式的不同了。实际上这样处理就是告诉sql server我给你传进去的日期是什么格式的,剩下的事就是sql server的事了。我只在sql server 2000上测试通过。有兴趣的朋友可以试试其它的数据库。看能否帮到你!