access表中日期类型字段:时间sqlstr:='select * from 表 where 时间 between '''+edit6.text+'%'' and '''+edit7.text+'%''' ; dm.adoquery1.Close;
dm.adoquery1.SQL.Clear;
dm.adoquery1.SQL.Add(sqlstr);
dm.adoquery1.open;
输入2004-5-1和2004-6-30运行出错,提示表达式数据类型不匹配
dm.adoquery1.SQL.Clear;
dm.adoquery1.SQL.Add(sqlstr);
dm.adoquery1.open;
输入2004-5-1和2004-6-30运行出错,提示表达式数据类型不匹配
把%去掉,手动添加时间字符串!
如:
sqlstr:='select * from 表 where 时间 between '''+edit6.text+' 00:00:00'' and '''+edit7.text+' 23:59:59''' ;
函数用这个.
StrToDateTime(const S: string): TDateTime;
convert(char(10),日期,102)='2004-05-01' 求时间就把102修改为108
如果是Access的话 就要用DataValue和TimeValue 记得 日期和时间不能写在一起查询 要分开!
dm.adoquery1.SQL.Clear;
dm.adoquery1.SQL.Add('select * from table where time between :date_begin and :date_end ');
parameters.ParamByName('date_begin').Value := edit6.text;
parameters.ParamByName('date_end').Value := edit7.text;
dm.adoquery1.open;
会默认为是 2004-05-01 00:00:00
问题还是可以解决的。
1、检查输入的字符是否日期格式:
Try
strtodate(edit6.text);
strtodate(edit6.text);
except
showmessage('日期格式出错,请重新输入。');
exit;
end;
2、检查数据库中“时间”字段是否为日期类型。如果是才能用between,如果是字符类型就肯定出错啦。
3、在写sql语言时,先把字符转为日期格式,那么就会有标准的日期格式。然后再转换成str格式。
例如:sqlstr:='select * from 表 where 时间 between '''+datetostr(strtodate(edit6.text))+''' and '''+datetostr(strtodate(edit7.text))+'''';
4、不需要加%号。
select * from 仓库入库管理 where DateValue(入库日期) between '''+edit6.text+''' and ''' ecit7.text +'''';sql-server
select * from 仓库入库管理 where convert(char(10),入库日期,102) between '''+edit6.text+''' and ''' ecit7.text +'''';
改为
sqlstr:='select * from 表 where 时间 between '''+strtodate(edit6.text)+''' and '''+strtodate(edit7.text)+'''';