各位大侠,俺是菜鸟,有遇到很多问题无法解决,求各位大侠高抬贵手,就是我做的一个查询窗体:
在查询日期时出了问题,部分代码如下:
if edt3.Text<>'    /  /  '  then
       begin
        s:=FormatDateTime('yyyy-MM-dd',edt3.Date);
        // s:=DateToStr(FormatDateTime('yyyy-MM-dd',edt3.Date));
         sqlyuju:=sqlyuju+'Pin_date>='+s+' and ';
       end;
 if edt4.Text<>'    /  /  ' then
    begin
     // s:=DateToStr(FormatDateTime('yyyy-MM-dd',edt4.Date));
        sqlyuju:=sqlyuju+'Pin_date<='+FormatDateTime('yyyy-MM-dd',edt4.Date)+' and ';
     end;
但是在数据库中Pin_date的数据类型是Char(32);在执行时总是提示我‘再将varchar值2012-07-14    转换成int时失败’;
各位有什么好的方法帮我解决一下这个问题吗?先多谢了~~,先说明一下,我的edt3和edt4是第三方控件,他的日期格式是
yyyy/MM/dd的格式,而数据库的日期格式是yyyy-MM-dd的字符型数据,所以我想用FormatDateTime('yyyy-MM-dd',edt3.Date)
进行一下格式转换在进行笔较,各位对于这个问题有什么好的方法吗,教小弟一下,再次感谢~~

解决方案 »

  1.   

    再将varchar值2012-07-14 转换成int时失败,请问这个你是怎么干的
      

  2.   

    比如,edt4.Date是2012/7/16, 那么你这里sql语句是 ... Pin_date<=2012/7/16 ...比较日期、字符要加上单引号,否则它会视为数字
    所以MSSQL想把2012/7/16转换成数字的时候,转换不成功就会这样的错误了改成,其它类似
    sqlyuju:=sqlyuju+'Pin_date<='+quotedstr(FormatDateTime('yyyy-MM-dd',edt4.Date))+' and ';
      

  3.   

    在使用SQL语句时,日期通常是以字符形式书写,例:select * from FD_Date = '2012-07-16 00:30:00'
    你的语句,在使用的时候,少加了引号
    sqlyuju:=sqlyuju+'Pin_date<='+FormatDateTime('yyyy-MM-dd',edt4.Date)+' and ';
    改为
    sqlyuju:=sqlyuju+'Pin_date<='''+FormatDateTime('yyyy-MM-dd',edt4.Date)+''' and ';
      

  4.   

    能解释一下+quotedstr(FormatDateTime('yyyy-MM-dd',edt4.Date))是什么意思吗?
      

  5.   

    sqlyuju:=sqlyuju+'Pin_date<='+FormatDateTime('yyyy-MM-dd',edt4.Date)+' and ';
    这个sqlyuju是sql语句?????
    sql中根本就没FormatDateTime这个函数,这个函数是delphi的,不出错才怪呢,应该用convert(varchar(8),Edt4.date,112)
      

  6.   

    上面的回复看错了,不好意思,既然数据库中Pin_date的数据类型是Char(32);干嘛用FormatDateTime('yyyy-MM-dd'……)而不用FormatDateTime('yyyyMMdd',……)呢?
      

  7.   

    因为在数据库中存储的日期类型是yyyy-MM-dd形式的