数据库是oracle,数据表中time 的类型是 date型
查找某一天的数据,程序如下:
with adoquery1 do 
begin
close;
sql.clear;
sql.add(select * from table_name where time=:a);
parameters.items[0].value:=datetimepicker1.date;
open;
end;
这样程序会报错:不一致的数据类型。
这样写有错误吗?
有没有更好的写法/

解决方案 »

  1.   

    with adoquery1 do 
    begin
    close;
    sql.clear;
    sql.add(select * from table_name where time=:a);
    parameters.items[0].value:=DateToStr(datetimepicker1.date);
    open;
    end;这样就可以了
      

  2.   

    sql.add(select * from table_name where [time]=:a);
                                           ~~~~~~我没测试过,但怀疑是time引起的问题,因为time是保留字或者函数,你这样写可能引起了二义性。建议回避这样的列名称,或者用[]括起来。
      

  3.   

    parameters.items[0].value:=DateToStr(datetimepicker1.date);改为parameters.items[0].value:=DateToStr(datetimepicker1.text);
      

  4.   

    上面的方法都不行,我试了另外一种方法没有错误,
    with adoquery1 do 
    begin
    close;
    sql.clear;
    sql.add(select * from table_name where time=:a);
    parameters.items[0].value:=datetimepicker1.datetime;
    open;
    end;
    就是把datetimepicker1.date该为datetimepicker1.datetime;
    但是,明明有数据它却查不出来,奇怪。
      

  5.   

    with adoquery1 do 
    begin
    close;
    sql.clear;
    sql.add('select * from table_name where time=to_date(''yyyy-mm-dd hh24:mi:ss'','':a'')');
    parameters.items[0].value:=DateTimetoStr(datetimepicker1.datetime);
    open;
    end;
      

  6.   

    你那样当然查不出来。 因为字段类型是 Date。
    with adoquery1 do 
    begin
      close;
      sql.clear;
      sql.add(select * from table_name where time=:a);
      parameters.ParamByName('a').asstring:=DateToStr(datetimepicker1.date);
      open;
    end;
      

  7.   

    Sql.add('select * from table_Name where time=:a');
    如果数据库中的内容确实是Date型的,上面的应该没有问题。
      

  8.   

    查询语句一般这样写:(用日期查询、只写SQL语句)select * from table_name where time>=a And time<=a +1
      

  9.   

    select * from table_name where time>=:a And time<=:a +1
    parameters.ParamByName('a').asstring:=DateToStr(datetimepicker1.date);
      

  10.   

    with adoquery1 do 
    begin
    close;
    sql.clear;
    sql.add(select * from table_name where [time]=:a);
    parameters.items[0].value:=DateToStr(datetimepicker1.date);
    open;
    end;
    注意:time会和系统有冲突要用[]括号来括住然合转换一下就可以了
      

  11.   

    应该是日期类型的精度问题
    sqlstr:='select * from table_name where to_char(time,'''yyyymmdd''')=:a';
    sql.add(sqlstr);
    Params[0].asstring:=formatdatetime('yyyymmdd',datetimepicker1.date);
    测试通过
      

  12.   

    应该是日期类型的精度问题
    sqlstr:='select * from table_name where to_char(time,''yyyymmdd'')=:a';
    sql.add(sqlstr);
    Params[0].asstring:=formatdatetime('yyyymmdd',datetimepicker1.date);
    测试通过sorry,上面的错了一点,这下行了
      

  13.   

    你用的是什么数据库,如是Access则必须在时间日期型两边加上#
    如select * from tablename where Datetime字段>#2002-8-30 13:50:50#
    再就是要把adoquery的paramcheck属性设为false;