大家好
   我现在遇到这样一个问题,用delphi 自带的adoquery来更新数据,但当一个字段的内容含引号的时候,如何处理呢。
  我是这样做的,delphi 语法如下:
  with Appdm.qry_Upd do
  begin
    close;
    sql.Add('Update IT_PcFiksInfo SET FixsName='''+FixsName+''',OfType='''+OfType+''','+
                                          'OfArea='''+OfArea+''',OfDept='''+OfDept+''','+
                                          'UserOfID='''+UserOfID+''',UserOfName='''+UserOfName+''','+
                                          'PcConfiguration='''+QuotedStr(PcConfiguration)                                          +',OfficeAddr='''+OfficeAddr+''','+
                                          'Depreciation='''+Depreciation+''',FixsPrice='''+FloatToStr                                          (FixsPrice)+''' where pcid='''+pcid+'''');
     ExecSQL;
   end; 
但当有一个字段值为含有引号的时候(如UserOfName字段的值为周's),就会出错。sql Server Profiler 跟踪的结果如下:
Update IT_PcFiksInfo SET 
FixsName='IBM笔记本',OfType='C-BJB',OfArea='F-03',OfDept='D10',UserOfID='',UserOfName='周'S',PcConfiguration='14'英寸',OfficeAddr='资讯部办公室',Depreciation='',FixsPrice='0' 
where pcid='C-ZJTESTA'
请问高手有没有比较好的处理带引号字段值的方法。
在此先谢谢大家了

解决方案 »

  1.   

    'Update IT_PcFiksInfo SET FixsName=:fixsName'
    ParaByName('fixsName').asString:=FixsName;
      

  2.   

    字符串中的单引号用两个引号表示
    如:   str:= 'asdf''asdf';  中间的两个''代表一个'
      

  3.   

    楼主 吧SQL 语句写成这样子 ,让我看的呕心沥血啊为什么不用Format呢
      

  4.   

    大家好:
      问题我自己搞定了,我是通过一个自定义的函数来实现的。详情见下文。
    function vartosql(value: Variant): String;
    begin
      if varisnull(Value) then
      Result :='NULL'
      else
      Case VarType(Value) of
        varDate :
          Result :=Quotedstr(Datetimetostr(VartoDatetime(Value)));
        varString,varOlestr:
          Result :=Quotedstr(Trim(Vartostr(Value)));
        varboolean:
          begin
            if Value then
              Result :='1'
            else
              Result :='0';
          end
        else
          Result :=Quotedstr(Trim(Vartostr(Value)));
      end;
    end;
    *******************************************************************
    begin
      lsSQL :='Update IT_PcFiksInfo SET FixsName='+vartosql(FixsNameNew)+',OfType='+vartosql(OfTypeNew)+','+
                                              'OfArea='+vartosql(OfAreaNew)+',OfDept='+vartosql(OfDeptNew)+','+
                                              'UserOfID='+vartosql(UserOfIDNew)+',UserOfName='+vartosql(UserOfNameNew)+','+
                                              'PcConfiguration='+vartosql(PcConfigurationNew)+',OfficeAddr='+vartosql(OfficeAddrNew)+','+
                                              'Depreciation='+vartosql(DepreciationNew)+',FixsPrice='+vartosql(FloatToStr(FixsPriceNew))+' where pcid='+vartosql(pcid)+'';
          if SQLInterface.ExecuteSQL(lsSQL,lsErr)<>0 then
          begin
            InformationDlg(tit,lsErr);
            result :=1;
          end;
        end