我想查找以“入库日期”为区间的商品数据,而写了以下程序:
procedure TForm1.Button1Click(Sender: TObject);
var
date1,date2:TdateTime;
begin
date1:=strtodate(MaskEdit1.Text);//存放开始日期值,接收MaskEdit1.Text的值
date2:=strtodate(MaskEdit2.Text);//存放结束日期值,接收MaskEdit2.Text的值with query1 do
begin
close;
sql.Clear;
query1.SQL.Add('select * from tab1 where 入库日期 >:A and 入库日期<:B');
query1.ParamByName('A').AsDate:=date1;
query1.ParamByName('B').Asdate:=date2;
open;
end;
end;这段程序能轻易通过编译,但在运行时输入正确的查询日期却出现以下错误:
'ODBC Microsoft Access Driver:时间日期格式无效(null)'
明明用strtodate函数转换了格式,怎么会有这种错误呢?再想问一下ADOQQuery怎么没有和Query.ParamByName的方法,ADOQQuer有没有类似Query.ParamByName的方法呢?

解决方案 »

  1.   

    with query1 do
    begin
    close;
    sql.Clear;
    query1.SQL.Add('select * from tab1 where 入库日期 >:A and 入库日期<:B');
    query1.ParamByName('A').value:=date1;
    query1.ParamByName('B').value:=date2;
    open;
    end;
      

  2.   

    with query1 do
    begin
    close;
    sql.Clear;
    query1.SQL.Add('select * from tab1 where 入库日期 >:A and 入库日期<:B');
    query1.ParamByName('A').value:=date1;
    query1.ParamByName('B').value:=date2;
    open;
    end;这段代码能解决了部分问题,但是却出现了不正确的结果。
      

  3.   

    sql语句没有写对吧,先在sql查询分析器里试一下
      

  4.   

    with query1 do
    begin
      close;
      sql.Clear;
      SQL.Add('select * from tab1 where (入库日期 >:A) and (入库日期<:B)');
      ParamByName('A').value:=date1;
      ParamByName('B').value:=date2;
      prepare ;
      open;
    end;
      

  5.   

    在ADO里是这样  写的:
    query1.Parameters.ParamByName('B').Value:=date2;建议你用TDateTimePicker!procedure TForm1.Button1Click(Sender: TObject);
    var
    date1,date2:TdateTime;
    begin
    date1:=DateTimePicker1.DateTime;
    date2:=DateTimePicker2.DateTime;with query1 do
    begin
    close;
    sql.Clear;
    query1.SQL.Add('select * from tab1 where 入库日期 >:A and 入库日期<:B');
    query1.ParamByName('A').AsDate:=date1;
    query1.ParamByName('B').Asdate:=date2;
    open;
    end;
    end;
      

  6.   

    以上各位的代码都试了,查询结果还是达不到预期的效果。请问TDateTimePicker组件在哪个面板可以找到。