有两个EDIT,如果我什么也不输入,则显示所有记录,如果在任意一个里面输入的日期不正确也显示所有记录,否则显示日期位于这两个输入的日期之间的所有记录。具体要怎么实现,主要是怎么判断EIDT里输入的可不可以转换为正确的日期。多谢了!

解决方案 »

  1.   

    try
      strtodate(edit1.text);
    except
      showmessahe('error');
    end;
      

  2.   

    不如用参数,方便些,你参考下
    procedure TForm9.Button2Click(Sender: TObject);
    begin
    datamodule5.Query2.Close;
    datamodule5.Query2.SQL.Clear;
    datamodule5.Query2.SQL.Add('select distinct ky_xb,sum(ky_gzl) as ky_gzl,avg(ky_gzl) as ky_per_gzl from table2');
    datamodule5.Query2.SQL.add('where ky_fb>:A and ky_fb<:B');
    datamodule5.Query2.SQL.Add('group by ky_xb');
    datamodule5.Query2.Params.ParamByName('A').AsDateTime:=datetimepicker1.datetime;
    datamodule5.Query2.Params.ParamByName('B').AsDateTime:=datetimepicker2.DateTime;
    datamodule5.Query2.Prepare;
    datamodule5.Query2.Open;
    datamodule5.Query2.Refresh;
    end;//datetimepicker方便些用edit一样的但要转换类型
      

  3.   

    用两个datetimepicker把showCheckbox属性设为true就能达到你的要求了
      

  4.   

    var
      StartDate,EndDate,sWhere:String;
    begin 
      StartDate:='';
      EndDate:='';
      try
        strtodate(edit1.text);
        StartDate:=Edit1.text;
      except
      end;
      try
        strtodate(edit2.text);
        EndDate:=Edit2.text;
      except
      end;
      cwhere='';
      if startDate<>'' and EndDate<>'' then 
         sWhere:='where 你的日期字段>='+#39+startDate+#39+' and 你的日期字段<='+#39+EndDate+#39
      else  if startDate<>'' and EndDate='' then 
               sWhere:='where 你的日期字段>='+#39+startDate+#39
            else  if startDate='' and EndDate<>'' then 
                 sWhere:='where 你的日期字段<='+#39EndDate+#39
      with adoquery1 do 
           close;
           sql.clear;       
           sql.add('select * from 你的表 '+sWhere)
           open;
      end;
      .
      .
      .
      .
    end;  
      

  5.   

    不好意思,没有加括号呀
    if (startDate<>'') and (EndDate<>'') then 
         sWhere:='where 你的日期字段>='+#39+startDate+#39+' and 你的日期字段<='+#39+EndDate+#39
      else  if (startDate<>'') and (EndDate='') then 
               sWhere:='where 你的日期字段>='+#39+startDate+#39
            else  if (startDate='') and (EndDate<>'') then 
                 sWhere:='where 你的日期字段<='+#39EndDate+#39
      

  6.   

    TO jinjazz(近身剪(N-P攻略)) 采纳了你的意思,谢谢!TO  ypnet(高原) #号什么意思啊,
    马上结贴!
      

  7.   

    http://community.csdn.net/Expert/topic/3654/3654301.xml?temp=.6977198
    帮忙看看。谢谢!
      

  8.   

    请问一下这个什么意思:
    'where ky_fb>:A and ky_fb<:B'为什么要‘:’号,有什么作用,还有
    datamodule5.Query2.Params.ParamByName('A').AsDateTime:=datetimepicker1.datetime;里面ParamByName('A').AsDateTime是什么意思。谢谢了
      

  9.   

    'where ky_fb>:A and ky_fb<:B'为什么要‘:’号,有什么作用
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    这里使用参数A、B,参数的值可在open之前动态赋值,其中':'号代表引用参数。
    datamodule5.Query2.Params.ParamByName('A').AsDateTime:=datetimepicker1.datetime;里面ParamByName('A').AsDateTime是什么意思。
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    这里是给参数A赋值,意思是把datetimepicker1.datetime的值赋给参数A。
      

  10.   

    datetimepicker
    随便学习一下
      

  11.   

    建议用datetimepicker.可以用两个。例如:datetimepicker1和datetimepicker2。
    然后建议用TADOQUERY或TADODATASET。
    SQL语句为 
    str:='select * from 表名 where 日期字段名 between #'+datetostr(datetimepicker1.date)+'# and #'+datetostr(datetimepicker2.date)+'#' 
    adoquery1.sql.add(str);
    str你应该会定义吧。如果用TADODATASET应该那么最后一句改为adodataset1.commandtext:=str;
    就这样