我有3个combobox控件,combobox1表示年,combobox2表示月,combobox3表示日,我的日期字段是achievedate,我用table1.fieldbyname('achievedate').asstring:=
combobox1.text+'-'+combobox2.text+'-'+combobox3.text;将日期送入库中,asstring对吗?是否应该用asdate还是asdatetime?之后我用table查询大于某个日期的记录,同样,这个日期是用3个combobox表示的,其查询语句是:
with table do
begin
  active:=fasle;
filer:='achievedate>'''+combobox1.text+'-'+combobox2.text+'-'+combobox3.text+'''';
  filtered:=true;
  active:=true;
end;
请问filer:='achievedate>'''+combobox1.text+'-'+combobox2.text+'-'+combobox3.text+''';这条语句对吗?我在运行时出现type mismatch in expression这种错误,是怎么回事?应该怎么改?还是别的地方除了问题,我的数据表是用delphi创建的。

解决方案 »

  1.   

    table1.fieldbyname('achievedate').AsDateTime = yyyy-mm-dd
      

  2.   

    是啊,那应该怎么做,我写成achievedate>strtodate'''+combobox1.text+'-'+combobox2.text+'-'+combobox3.text+''''也不对,他说strtodate找不到,应该怎么办,我要疯了!!!
      

  3.   

    先进行类型转化,函数是:ENDATACODE什么的,,嗨,,忘了,,你找找
      

  4.   

    yyyy-mm-dd用combobox表示是combobox1.text+'-'+combobox2.text+'-'+combobox3.text吗?我觉得没错啊
      

  5.   

    adoquery1.Fields[1].Asdatetime:=strtodatetime(combobox1.text+'-'+combobox2.text+'-'+combobox3.text);
    Adoquery1.Post;
    刚这段代码测试通过了,你试一下。
      

  6.   

    你用个datetimepicker不可以吗?
    有这么麻烦吗?
      

  7.   

    为啥非要用combobox控件表示年月日呢???
      

  8.   

    用daatimepicker不就OK了么……顶多用strToDate、FormatDatetime之类的函数转来转去。
      

  9.   

    datetimepicker怎么用啊?请明示!!!
      

  10.   

    如果不用combobox用什么,我们老板要求我用combobox,他说这样方便,可以直接选,那我该怎么办?请快帮我解决,不然我就要到山沟沟去了
      

  11.   

    楼上的说得很清楚了嘛。我觉得你可以用combobox,这不是问题的关键。关键在于combobox是Tstring型的,你要给它转换成日期型的,就是用strtodatetime(combobox1.text+'-'+combobox2.text+'-'+combobox3.text)或者是strtodatetime(combobox2.text+'/'+combobox3.text+'/'+combobox1.text);
      

  12.   

    你用的是什么数据库啊,access吗?如果是请试试这样filer:='achievedate>#'+combobox1.text+'-'+combobox2.text+'-'+combobox3.text+'#';
      

  13.   

    用DATETIMEPICKER就可以了呀!
    table1.fieldbyname('achievedate').ASDATETIME:=DateTimePicker1.Date;
    保存日期至数据库.
    filer:='achievedate>'''+DateToStr(DateTimePicker1.Date)+'''';
    进行查找.
    下回最好用QUERY,然后用SQL进行查找,更方便.
      

  14.   

    日期和字符型没法匹配,你可以考虑一下用,strintodata()函数,括号内是你输入的字符数字!
      

  15.   

    你这个问题解决了没有?我给你说个完整的!
    Procedure pSearch
    var  
      s, ss, ss :Word;
      dDate : TDateTime;
    Begin
      s   := strToint(combobox1.text);//年
      ss  := strToint(combobox2.text);//月
      sss := strToint(combobox3.text);//日
      dDate := Encodedate(s,ss,sss);
      With table do
      begin
        Filtered := false;
        Filter   :='achievedate > '''+DateToStr(dDate)+'''' ;
        Filtere  := true
      End;  这样 OK拉!End;
      

  16.   

    DELPHI有DATE的专门控件,在WIN32页上,还有,如果用组合也成,但要注意象1月要取01的值,1日要取01的值,这样组合才不会错,最后还要类型转化,呵呵,你不嫌麻烦的话,那可以那么用,我是要直接用DATE的控件
      

  17.   

    感谢各位的帮助!!!
       是啊,我们老板就是这样,在他面前就是第一服从,第二完全服从,第三绝对服从.唉,我命苦啊!!!不过,我还有一个问题,就是在delphi中金额是$,那么"strto金额"应该怎么写,我找帮助怎么找不到呢?还有几天旧到期了,你们一定要帮我啊!!!
      

  18.   

    s, ss, ss :Word;
      dDate : TDateTime;
    Begin
      s   := strToint(combobox1.text);//年
      ss  := strToint(combobox2.text);//月
      sss := strToint(combobox3.text);//日
      dDate := Encodedate(s,ss,sss);
      With table do
      begin
        Filtered := false;
        Filter   :='achievedate > '''+DateToStr(dDate)+'''' ;
        Filtere  := true
      End;
    怎么不行啊,还是说类型不匹配。
    我也用table1.fieldbyname('achievedate').ASDATETIME:=DateTimePicker1.Date;
    保存日期至数据库.
    filer:='achievedate>'''+DateToStr(DateTimePicker1.Date)+'''';试过了,可是还是出现同样的错误,究竟是怎么回事呢,我快疯了。
      

  19.   

    教你个测试的方法,你先在QUERY中的FILTER属性中填入如“achievedate>'2003-11-7'”的例子,看哪个能用,然后在写语句。还有,可以这样写,再试一下,
    filter:='achievedate>'+''''+DateToStr(DateTimePicker1.Date)+'''';我通常加单引号时都这样加,即明显,又不易出错。