总是遇到在其他开发工具中很简单解决的问题一到delphi中就莫明错误,
“聪明的程序员用delphi”真是这样吗?
procedure TfrmBuyIn.TabSheet1Show(Sender: TObject);
var
  tmp:string;
begin
  tmp:=DateToStr(date);
  with qy_TodayBuy do
  begin
    Close;
    sql.Clear;
    //问题在下面这语句。难道delphi的SQL查询你们真的觉得好用?
    //Allbooks 中有记录,且字段buydate为文本型,值为‘2003-8-16’
    sql.Add('select * from Allbooks where buydate='+quotedstr(tmp));
    open;
    showmessage(qy_TodayBuyName.AsString);//显示不出内容。
  end;
end;
若将sql.Add('select * from Allbooks where buydate='+quotedstr(tmp));
改成
sql.Add('select * from Allbooks where buydate='+quotedstr('2003-8-16'));
那么就正常了。这是怎么回事,谁能说清楚呢?????????????

解决方案 »

  1.   

    在tmp:=DateToStr(date)中,你能确定转换后的格式是YYYY-MM-DD吗???
    DateToStr函数的说明写得很明白,是将日期转换成系统的短日期格式,是与操作系统有关的!!!
    你最好使用formatDateTime函数代替DateToStr,这个函数与系统无关!!!
    Temp := FormatDateTime( 'YYYY-MM-DD', Date );
      

  2.   

    首先单步调试,看看tmp:=DateToStr(date);
    这句给变量赋予了什么值!
    那些只是细节问题,决非不能解决
    如果查不出来,建议你用parameters.parabyname方法来代入sql参数吧
    这样显得明了一点
      

  3.   

    DateToStr函数转换时是根据系统的日期格式来确定转换后的格式的,你可以FormatDateTime函数来转换成特定的格式。
      

  4.   

    改成Tmp := FormatDateTime( 'YYYY-MM-DD', Date );也不行,用参数也不行啊?我用的是XP,不知有没有影响?
    参数用法:
    SQL.Text:='select * from Allbooks where buyDate=:PDate';
    Parameters.ParamValues['PDate']:=tmp;
    这就是Delphi吗?
    各位谁还能解决啊,解决立即分都给他好了!
      

  5.   

    在极度失望之间,试着改成tmp:=FormatDateTime( 'YYYY-M-D', Date );竟然可以了:) ^_*
    说明和操作系统有很大关系啊。特此感谢:
      Delphi_Li(Delphi Li) 和TOMWLD(仰首再笑天) ,一人25好了,望再接再厉啊,多帮助CSDN的初学者,这样才会有更多的星星出现,中国的软件才能生长、壮大啊!!!!!!
      

  6.   

    你不要总是把Delphi如何如何挂在嘴边, 你用过C吧, 用Format()函数试试, 它和C的printf()很像, 只要你的sql语句没问题, 就一定可以执行.
    SQL.Text := format('select * from Allbooks where buyDate=%s',[tmp]);
    Delphi是目前最强的桌面开发软件, 它的数据库功能更是强大的惊人, Object Pascal是唯一可与C++抗衡的高效率语言. 你应该好好学习, 而不是抱怨!