不知道如何查询在一个报表中日期在用户选定日期之内的记录
例如
表1为
day           money
2008-1-1      15
2008-5-6      100
2009-4-12     50
我在窗体上添加了DateTimePicker1的两个控件start,end,想在start设定开始日期
在end设定结束日期
然后单击Button1搜索表1
我根据书本上的介绍在Button1Click中写的如下代码,运行会出现问题,我不知道是什么原因
   ADOQuery1.Close;
   with ADOQuery1 do
   begin
      ADOQuery1.SQL.Clear;
      SQL.Add('Select * from v_dailysale');
      SQL.Add('Where total_momey between :a and :b ');
      SQL.Add('Where time_day between :a and :b ');
      Parameters[0].Value:=datetimetostr(DateTimePicker1.Time);
      Parameters[1].Value:=datetimetostr(DateTimePicker2.Time);
   end;
我刚刚学习Delphi,很多东西都不懂,希望哪位高手能够多多指教,帮我解决我得疑问,谢谢!

解决方案 »

  1.   

         SQL.Add('Select * from v_dailysale'); 
          SQL.Add('Where total_momey between :a and :b '); 
          SQL.Add('Where time_day between :a and :b '); 
    这里添加了两个where还能不出错
      

  2.   

    不好意思,弄错了,代码如下:
    ADOQuery1.Close; 
      with ADOQuery1 do 
      begin 
          ADOQuery1.SQL.Clear; 
          SQL.Add('Select * from v_dailysale'); 
               SQL.Add('Where time_day between :a and :b '); 
          Parameters[0].Value:=datetimetostr(DateTimePicker1.Time); 
          Parameters[1].Value:=datetimetostr(DateTimePicker2.Time); 
      end; 
    编译没错
      

  3.   

    where 与前面语句要有空格
      

  4.   

     SQL.Add('Where total_momey between :a and :b '); 
     SQL.Add('Where time_day between :a and :b '); 参数名也重了
      

  5.   

    我弄错了
    ADOQuery1.Close; 
      with ADOQuery1 do 
      begin 
          ADOQuery1.SQL.Clear; 
          SQL.Add('Select * from v_dailysale'); 
              SQL.Add('Where time_day between :a and :b '); 
          Parameters[0].Value:=datetimetostr(DateTimePicker1.Time); 
          Parameters[1].Value:=datetimetostr(DateTimePicker2.Time); 
      end; 
    没有  SQL.Add('Where total_momey between :a and :b '); 这一句
      

  6.   


      with ADOQuery1 do
      begin
        close;
        SQL.Text := ' Select * from v_dailysale'+
                    ' where time_day>=:a'+
                    ' and   time_day<:b';
        parameters.ParamByName('a').value := StrTodate(formatdatetime('yyyy-mm-dd',datetimepicker1.date));
        parameters.ParamByName('b').value := StrTodate(formatdatetime('yyyy-mm-dd',datetimepicker2.date+1));
        Open;
      end;
      

  7.   

    var
    k1,k2:string;
    begin
      k1:=formatdatetimepicker('yyyy-mm-dd',DateTimePicker1.date);
      k2:=formatdatetimepicker('yyyy-mm-dd',DateTimePicker2.date);
      with ADOQuery1 do 
      begin
        close;
        sql.clear;
        sql.add(''Select * from v_dailysale where time_day between '+''''+k1+''''+' and '+''''+k2+'''');
        open;
      end;
    end;
    这样的话你数据库里面的日期格式好像有点问题。要统一才行;
      

  8.   

    var
    k1,k2:string;
    begin
      k1:=formatdatetimepicker('yyyy-mm-dd',DateTimePicker1.date);
      k2:=formatdatetimepicker('yyyy-mm-dd',DateTimePicker2.date);
      with ADOQuery1 do 
      begin
        close;
        sql.clear;
        sql.add('Select * from v_dailysale where time_day between '+''''+k1+''''+' and '+''''+k2+'''');
        open;
      end;
    end;
    上面多加了一个点。
      

  9.   

    编译不能通过
    系统提示:formatdatetimepicker没定义
      

  10.   

    formatdatetimepicker改成formatdatetime!不好意思是我搞错啦。
      

  11.   

    var
    k1,k2:string;
    begin
      k1:=formatdatetime('yyyy-mm-dd',DateTimePicker1.date);
      k2:=formatdatetime('yyyy-mm-dd',DateTimePicker2.date);
      with ADOQuery1 do 
      begin
        close;
        sql.clear;
        sql.add('Select * from v_dailysale where time_day between '+''''+k1+''''+' and '+''''+k2+'''');
        open;
      end;
    end;