很长时间没有写数据库软件了,现在有个用时间查询的问题解决不了,请教各位,望多多指教!!! 先谢谢了
情况如下:
数据引擎采用,BDE 利用Delphi7自带的数据库
数据表: Date A 10
Name A 16
Amount N
实现目标: 想查询一段时间内时间内的物品数量
用DateTimePicker1 ,DateTimePicker2表示时间范围
实现代码如下:
Query1.close;
Query1.SQL.Clear;
Query1.SQL.Add('select * from DATA.db where date>=:a1');
Query1.sql.add(' and date <=:a2 ');
Query1.Params.ParamValues['a1']:=formatdatetime('yyyy-mm-dd',datetimepicker1.date);
Query1.params.ParamValues['a2']:=formatdatetime('yyyy-mm-dd',datetimepicker2.date);
Query1.SQL.add(' and Name like '''+edit1.Text+'%''');
Query1.sql.add(' order by date');
Query1.Open;但是该段代码执行到open时,会报"Invalid use of keyword.
Token:date>=?
Line Number:1.
的错误,请问如何解决???
情况如下:
数据引擎采用,BDE 利用Delphi7自带的数据库
数据表: Date A 10
Name A 16
Amount N
实现目标: 想查询一段时间内时间内的物品数量
用DateTimePicker1 ,DateTimePicker2表示时间范围
实现代码如下:
Query1.close;
Query1.SQL.Clear;
Query1.SQL.Add('select * from DATA.db where date>=:a1');
Query1.sql.add(' and date <=:a2 ');
Query1.Params.ParamValues['a1']:=formatdatetime('yyyy-mm-dd',datetimepicker1.date);
Query1.params.ParamValues['a2']:=formatdatetime('yyyy-mm-dd',datetimepicker2.date);
Query1.SQL.add(' and Name like '''+edit1.Text+'%''');
Query1.sql.add(' order by date');
Query1.Open;但是该段代码执行到open时,会报"Invalid use of keyword.
Token:date>=?
Line Number:1.
的错误,请问如何解决???
Query1.params.ParamValues['a2']:=floattostr(datetimetofloat(datetimepicker2.date));
将datetime参数转化为double参数.这样就不错了
另外改写sql语句也可以,将参数转化为时间型.access数据库用CDate,sqlserver用cast函数
Query1.SQL.Add('select * from DATA.db where date>=CDate(:a1) and date <=CDate(:a2) ');
但楼主代码里,sql语句参数用值替换后,与date比较的不是数值,也不时时间,也不是字串.只能导致语法错误.
Query1.SQL.Clear;
Query1.SQL.Add('select * from DATA.db where date>='':a1'''); //加引号试试
Query1.sql.add(' and date <='':a2'' '); //
Query1.Params.ParamValues['a1']:=formatdatetime('yyyy-mm-dd',datetimepicker1.date);
Query1.params.ParamValues['a2']:=formatdatetime('yyyy-mm-dd',datetimepicker2.date);
Query1.SQL.add(' and Name like '''+edit1.Text+'%''');
Query1.sql.add(' order by date');
Query1.Open;
标准SQL中,可以用方括号把字段名和表名括起来避免关键字冲突和多语言问题,如 [date]<=':a2',这个应当养成习惯,写SQL时,尽量都用方括号引用字段名、表名等。