修改前的语句(delphi):
ObjItem.SqlWhere := 'Fix_Org_Id=' + IntToStr(bedtFix_Org_Code.AddOnId)
                              //查询当年当月配件申请表中有没有记录    Modified by jz 20080514
                            + ' and TO_CHAR(Create_Time,'YY-MM')=TO_CHAR(sysdate,'YY-MM')'
                              //过滤掉在申请安排日期时申请的记录      Modified by jz 20080514
                            + ' and TO_CHAR(Create_Time-1,'D') not in(
          select WeekDay from Css_Item_Apply_Timing where Org_Id=' + IntToStr(bedtOrg_Code.AddOnId)
                            + ')';
ObjItem.Search;修改后的语句(delphi):
ObjItem.SqlWhere := 'Fix_Org_Id=' + IntToStr(bedtFix_Org_Code.AddOnId)
                              //查询当年当月配件申请表中有没有记录    Modified by jz 20080514
                            + ' and TO_CHAR(Create_Time,' + '''' + 'YY-MM' + '''' + ')=TO_CHAR(sysdate,' + '''' + 'YY-MM' + '''' + ')'
                              //过滤掉在申请安排日期时申请的记录      Modified by jz 20080514
                            + ' and TO_CHAR(Create_Time-1,' + '''' + 'D' + '''' + ') not in(select WeekDay from Css_Item_Apply_Timing where Org_Id=' + IntToStr(bedtOrg_Code.AddOnId)
                            + ')';
ObjItem.Search;想请问大虾们的问,有没有简单的方法,比如直接用函数转化 and TO_CHAR(Create_Time,'YY-MM')=TO_CHAR(sysdate,'YY-MM')成字符串,delphi不去做处理。因为如果像我修改后的那种方法,对以后修改有很多问题,而且如果改多个问题很不便,有没有哪位大虾有更好的方法,谢了!

解决方案 »

  1.   

    'and TO_CHAR(Create_Time,''YY-MM'')=TO_CHAR(sysdate,''YY-MM'')'或者先用双引号代替单引号:'and TO_CHAR(Create_Time,"YY-MM")=TO_CHAR(sysdate,"YY-MM")'
    再ReplaceString.将双引号替换成单引号。
      

  2.   

    1楼的方法我一直在用function wlzh(str:ansistring):ansistring;   //无聊转换
    begin
    result:=AnsiReplaceStr(str,'"',#39);
    end;sqltext:=' ... ';
    sqltext:=wlzh(sqltext);
      

  3.   

    谢谢一楼,原来我用过第一种方法,由于not in后面的语句回车到第二行所以导致报错,原来以为加双引号不行。至于第二种方法,还不太明白,谢了!
      

  4.   

    二楼:
    protected
    function wlzh(str:ansistring):ansistring;function wlzh(str:ansistring):ansistring;   //无聊转换
    begin
      result:=AnsiReplaceStr(str,'"',#39);
    end;我试了以后,报未定义AnsiReplaceStr,不知什么原因,不过还是谢谢大虾。