数据库用的自带的paradox,那个Zhbh和Yblx本来就是字符型的字段,那个没什么,关键是日期型S字段frq的处理
var
  Present,StartDate,EndDate: TDateTime;
  Year, Month, Day: Word;
begin  //只列出了其中一段
          Present:=now;
          DecodeDate(Present,Year, Month, Day);
          Month:=StrToInt(Trim(MaskEdit1.Text));
          Day:=1;
          StartDate:=EncodeDate(Year,Month,Day);
          Day:=28;
          EndDate:=EncodeDate(Year,Month,Day);
          Query1.Close;
          Query1.SQL.Clear;
          Query1.SQL.Add('Select Ybsj From jlybsj');
          Query1.SQL.Add('Where (Zhbh='+QuotedStr(ComboBox1.Text)+')');
          Query1.SQL.Add(' And (Yblx='+QuotedStr(ComboBox2.Text)+')');
          Query1.SQL.Add('And (Sfrq>:StartDate And Sfrq<:EndDate)');
          Query1.Open;
          Query1.ParamByName('StartDate').AsDateTime:=StartDate;
          Query1.ParamByName('EndDate').AsDateTime:=EndDate;
end
错误:Field 'StartDate'is of unknown type
意图比较明显,请大虾指点错在哪,应该怎么改

解决方案 »

  1.   

    Query1.SQL.Add('And (Sfrq>:StartDate And Sfrq<:EndDate)');
    Query1.ParamByName('StartDate').AsDateTime:=StartDate;
    Query1.ParamByName('EndDate').AsDateTime:=EndDate;
    Query1.Open;
      

  2.   

    好象没有错误
    根据提示:是数据库中的StartDate设置的类型出错
      

  3.   

    to 东北人,这个问题不是关键了,顺序改过来
    提示错误:capability not supported
    我是提了两次,可是开始和那位兄弟讨论了半天问题没有解决
    如果能解决,100分我也无所谓的
      

  4.   

    to sailor:StartDate是个变量,我在上面有申明的
      

  5.   

    “to 东北人,这个问题不是关键了”
    这当然是关键,在Open前才能给参数赋值
    至于你说的提示信息是因为类型不匹配,你可以调试一下,看到哪一句后出错
      

  6.   

    其他得还好调,可是这SQL语句一直困惑我,这个东东不好调,要么是一起执行得
    怎么看得到是哪一条出错?有没有什么好方法
    我说得这不是关键得意思,是我开始就是这样得,后来有个网友让我这样试试,我
    就改一下试试
      

  7.   

    query1.params[0].datatype:=?
    这样定义数据类型,
    在USES中引用table,dbtable
      

  8.   

    表里的字段Sfrq的类型是你确定是日期型的么?
      

  9.   

    Query1.SQL.Add('And (Sfrq>:StartDate And Sfrq<:EndDate)');把参数去掉看看,

    query1.sql.add('and ')
    query1.sql.add(' sfrq>'''+datetostr(StartDate)+''' and Sfrq <'''+ datetostr(EndDate)+'''')我用ado时,用字符串不错
      

  10.   

    在Open前给参数赋值
                Query1.Open;
              Query1.ParamByName('StartDate').AsDateTime:=StartDate;
              Query1.ParamByName('EndDate').AsDateTime:=EndDate;改为
             Query1.ParamByName('StartDate').AsDateTime:=StartDate;
              Query1.ParamByName('EndDate').AsDateTime:=EndDate;
              Query1.Open;
              
      

  11.   

    to:东北人,当然确定了,表里有数据的嘛
    我改了一下,大家看看,错误提示是类型不匹配,我发现paradox的日期性格式
    有点怪哦,因为在在SQL builder里面输入select * from jlybsj where Sfrq<2003-01-03
    和select * from jlybsj where Sfrq<'2003-01-03'
    select * from jlybsj where Sfrq<'2003-1-3'
    select * from jlybsj where Sfrq<2003-1-3
    都提示类型不匹配var
      Present: TDateTime;
      StartDate,EndDate: String;
      Year, Month, Day: Word;Begin
              Present:=now;
              DecodeDate(Present,Year, Month, Day);
              Month:=StrToInt(Trim(MaskEdit1.Text));
              Day:=1;
              StartDate:=FormatDateTime('''yyyy''-''M''-''d''',EncodeDate(Year,Month,Day));
              Day:=28;
              EndDate:=FormatDateTime('''yyyy''-''M''-''d''',EncodeDate(Year,Month,Day));
              Query1.Close;
              Query1.SQL.Clear;
              Query1.SQL.Add('Select Ybsj From jlybsj');
              Query1.SQL.Add('Where (Zhbh='+QuotedStr(ComboBox1.Text)+')');
              Query1.SQL.Add(' And (Yblx='+QuotedStr(ComboBox2.Text)+')');
              Query1.SQL.Add('And Sfrq>'+QuotedStr(StartDate)+' And Sfrq<'+QuotedStr(EndDate));
              ShowMessage(Query1.SQL.Text);
              Query1.Open;end
      

  12.   

    formatdatetime('m/d/yy',now);
    你再试试这种格式