数据库是SQL server
query1.Active:=true;
   query1.Close;
   query1.SQL.Clear;
   query1.SQL.Add('select 字段1, count(字段2) as renshu' );
   query1.SQL.Add('from');
   query1.SQL.Add('(');
   query1.SQL.Add('select Distinct 字段1,字段1=DatePart(Hour,af_StartCounter)');
   query1.SQL.Add('from');
   query1.SQL.Add('表');
   query1.SQL.Add('Where DateDiff(day,字段3,:DateLimit)=0');
   query1.sql.add(') T');
   query1. sql.add('Group By 字段1');
   query1.ParamByName('DateLimit').AsDateTime:=StrToDate(Edit1.Text);
我在EDIT1中需要输入2002-8-15如果我输入2002-8就出错了

解决方案 »

  1.   

    query1.SQL.Add('select Distinct 字段1,字段1=DatePart(Hour,af_StartCounter)');
    中af_StartCounter是字段3
      

  2.   

    StrToDate(Edit1.Text);//的问题。不能将字符串转化为日期。填写正确的日期字符
      

  3.   

    to:genphone_ru(票票) 
    谢谢你的回答,我不明白‘);//的问题。不能将字符串转化为日期。填写正确的日期字符’
    是什么意思呀,我输入2002-8-15这样的形式是可以找到数据的呀
      

  4.   

    '2002-8'不能进行StrToDate的转换。
    '2002-8-15'可以进行StrToDate的转换。
      

  5.   

    to: genphone_ru(票票) 
    那StrToDate(Edit1.Text);这句话该怎么写呀,怎样写才能避免输入'2002-8'
    使程序仍旧可以运行。
      

  6.   

    var  dd: Date;     try
           dd := StrToDate(Edit1.Text);
         except
           dd := StrToDate('1899-12-30');
         end;query1.ParamByName('DateLimit').AsDateTime:=dd;
      

  7.   

    用异常机制(我经常这样做):
     try
        strtodatetime(Edit1.Text);
     except
        showmessage("请输入一个合法的日期!");
        Edit1.SetFocus;
        Abort;
     end;
    在调试环境下会出现英文的的提示,但在正式运行时不会有问题。
      

  8.   

    to: shao528(红雪) 
    按照你的方法是这样写吗?
    query1. sql.add('Group By 字段1');
     try
         
     query1.ParamByName('DateLimit').AsDateTime:=StrToDate(Edit1.Text);
     except
        showmessage("请输入一个合法的日期!");
        Edit1.SetFocus;
        Abort;
      

  9.   

    to:shuixin13(心帆) 
    你指的是DatatimePicker控件吗??
      

  10.   

    方法一:写个异常处理吧
    方法二:用模糊查询allocate等。
    方法三:改一下你的代码,不是我直说,
    你好象没搞过DELPHI一样写出这样的查询语句,
    各种参考书上有的是这种例子。
      

  11.   

    to: caomuyong1(叶开) 
    是呀,我是和差不多没搞过DELPHI一样,你能介绍基本你说的参考书吗