各位大虾,我有以下语句
  update.SQL.Add('insert into aaa_lld(lldno,hbdno,ddate,cdepcode,prono,cmemo,hander) values('+
                 ''''+main_ado.fieldbyname('lldno').AsString+''''+','+
                 ''''+main_ado.fieldbyname('hbdno').AsString+''''+','+
                 ''''+main_ado.fieldbyname('ddate').AsString+''''+','+
                 ''''+main_ado.fieldbyname('cdepcode').AsString+''''+','+
                 ''''+main_ado.fieldbyname('prono').AsString+''''+','+
                 ''''+main_ado.fieldbyname('cmemo').AsString+''''+','+
                 ''''+mainunit.username+''''+')');
由于main_ado.fieldbyname('prono').AsString='FCDD0706005','FCDD0706021'
不能更新
跟总sql语句如下
insert into aaa_lld(lldno,hbdno,ddate,cdepcode,prono,cmemo,hander) values('001','001','2007-06-30 12:26:29','06',''FCDD0706005','FCDD0706021'','','ADMIN')
我该怎么改呀

解决方案 »

  1.   

    用"可以吗
    update.SQL.Add('insert into aaa_lld(lldno,hbdno,ddate,cdepcode,prono,cmemo,hander) values('+
                     ''''+main_ado.fieldbyname('lldno').AsString+''''+','+
                     ''''+main_ado.fieldbyname('hbdno').AsString+''''+','+
                     ''''+main_ado.fieldbyname('ddate').AsString+''''+','+
                     ''''+main_ado.fieldbyname('cdepcode').AsString+''''+',"'+
                     main_ado.fieldbyname('prono').AsString+'",'+
                     ''''+main_ado.fieldbyname('cmemo').AsString+''''+','+
                     ''''+mainunit.username+''''+')');
      

  2.   

    '''+main_ado.fieldbyname('lldno').AsString+''','+
                     '''+main_ado.fieldbyname('hbdno').AsString+''','+
                     '''+main_ado.fieldbyname('ddate').AsString+''','+
                     '''+main_ado.fieldbyname('cdepcode').AsString+''','+
                     '''+main_ado.fieldbyname('prono').AsString+''','+
                     '''+main_ado.fieldbyname('cmemo').AsString+''','+
                     '''+mainunit.username+''')');
      

  3.   

    或者这样写比较好看
    update.SQL.Add('insert into aaa_lld(lldno,hbdno,ddate,cdepcode,prono,cmemo,hander)'); 
    update.SQL.Add('values(:lldno,:hbdno,:ddate,:cdepcode,:prono,:cmemo,:hander)');
    update.Parameters.ParamByName('lldno').Value:=main_ado.fieldbyname('lldno').AsString;
    ...
    update.Parameters.ParamByName('lldno').Value:=mainunit.username;
    showmessage(update.SQL.text);//查看一下是否一一对应。
    update.execsql;
      

  4.   

    lishan200012的方法虽然可以,但是会影响我其他的语句,所以只能用字符,大家再帮想想办法
      

  5.   

    你需要对你的main_ado.fieldbyname('prono').AsString里的字符串里的单引号进行转意才可以,写个函数将prono里的单引号转成两个引号
      

  6.   

    ''''+StringReplace( main_ado.fieldbyname('prono').AsString,'''','''''',[rfReplaceAll])+''''+','+
      

  7.   

    注入式攻击也是利用这个方式来攻击的.最好用参数方式提交:
    以下例子
    var
      ExecResult: integer;
      NewGID: integer;
    begin
      try
        CheckData(Group);    with sAdoq do begin
          Parameters.Clear;
          Parameters.CreateParameter('UserID',ftString,pdInput,Len,FUserID);
          Parameters.CreateParameter('gGroupID',ftInteger,pdInput,4,NewGID);
          Parameters.CreateParameter('gTitle',ftString,pdInput,gTitleLen,Group.Title);
          Parameters.CreateParameter('gLastChangeCount',ftInteger,pdInput,4,Group.LastChangeCount);      SQL.Text := 'insert into t (UserID,GroupID,Title,LastChangeCount) '
            + ' values (:UserID,:gGroupID,:gTitle,:gLastChangeCount) ';      ExecResult := ExecSQL;
        end;
        Result := arrFinish;
      except
        Result := arrDataBaseFailed;
      end;
    这样不管值包括什么非法字符都没有问题,还能阻止注入式攻击
      

  8.   

    ('001','001','2007-06-30 12:26:29','06',''FCDD0706005','FCDD0706021'','','ADMIN')
    其中的''FCDD0706005','FCDD0706021''为什么有两个撇号??
    是不是这里的问题.