我用的是sql server 2000数据库在delphi程序中写的SQL语句如下
sql:='Update Maintenance Set Equ='+QuotedStr('15"AOC')+' where E_id=3'
执行时会提示:不正常地定义参数对象。提供了不一致或不完整的信息如下SQL语句,使用两个双引号不会出错,但写入表的结果却是带有两个引号: 15""AOC
sql:='Update Maintenance Set Equ='+QuotedStr('15""AOC')+' where E_id=3'

解决方案 »

  1.   

    建议组装SQL查询语句时使用单引号,单引号和双引号在MS SQL Server中的作用并不完全一样。
    尽量避免用QuotedStr这类函数对SQL语句中的字符串进行编码,为避免冲突可以自己写一个。function encode(const S: string): string;
    begin
      Result := StringReplace(S, '''', '''''', [rfReplaceAll]);
      ......
    end;sql := Format('Update Maintenance Set Equ=''%s'' where E_id=3', [encode('15"AOC')]); 
      

  2.   

    sql:='Update Maintenance Set Equ=''''15"AOC '''' where E_id=3' 
    你的那个15英寸不是可以按住shift+'打出来吗,就不会出现问题了啊
      

  3.   

    谢谢!但还是不行啊,以下函数是将''(两个单引号)替换成''''(四个单引号),可是我字符串中是带有"(双引号)
    function encode(const S: string): string; 
    begin 
      Result := StringReplace(S, '''', '''''', [rfReplaceAll]); 
      ...... 
    end; 
     
      

  4.   

    执行语句:INSERT INTO Maintenance (Equ) VALUES ('"''\%')
             GO
             SELECT Equ FROM Maintenance WHERE Equ='"''\%'
             GO
    可以确认在SQLServer中需要转义的只有单引号,也就是说在SQL语句中两个连续的单引号代表一个单引号,双引号和斜线无须转义
      

  5.   

    字符串中的单引号要使用2个,以下命令执行成功:
      aQuery.SQL.Add('Update A1 Set asd=''15''''AOC'' Where asd=''345dg''');
      

  6.   

    如果想要表达15'AOC,应书写为:''15''''AOC''(这里都是单引号)
      

  7.   


    不要使用函数QuotedStr,因为该函数是将字符串转义为引号字符串

    设 aString := '15''AOC';  //aString所表示的字符串是  15'AOC
    QuotedStr('15''AOC') 等于 '15''AOC'//QuotedStr('15''AOC')所表示的字符串是 '15''AOC'
     
    将你的sql语句改成下面的方式即可。
    sql := 'Update Maintenance Set Equ=' + '''15''AOC''' + ' where E_id=3';
      

  8.   

    写个存储过程,然后用delphi去调用存储过程执行. http://topic.csdn.net/u/20080318/13/31fe44b3-36cd-474f-8aea-99b3da69c64d.html
      

  9.   

    建议楼主先看看这个,了解什么英寸的符号,看你的SQL应该是说15英寸的冠捷的显示器吧
    http://zhidao.baidu.com/question/11460337.html?fr=qrl
    英寸的符号就是shift+",在SQL中怎么回有问题呢?不解!
      

  10.   

    var
      sEqu:string;
      iE_id:integer;
    begin
      sEqu:=QuotedStr('15"AOC');
      iE_id:=3;  
      sql := 'Update Maintenance Set Equ=' + sEqu + ' where E_id='+intToStr(iE_id)+'';
      ...
    end;谢谢大家的指教,原来在Sql的最后还要加上''(两个单引号)才可以,
    但是为什么还要加上''(两个单引号)才可以用"(双引号)呢,还有请前辈们指教!
      

  11.   

    这里依然有问题:
    sql := 'Update Maintenance Set Equ=' + sEqu + ' where E_id='+intToStr(iE_id)+''; 
    最后的''要使用4个单引号:'''',才可以通过.
      

  12.   

    哦,审题错误:sql := 'Update Maintenance Set Equ=' + sEqu + ' where E_id='+intToStr(iE_id); 
    可以看出E_id字段是数字类型的那最后的+''可以省略,如果是字符型的:
    sql := 'Update Maintenance Set Equ=' + sEqu + ' where E_id='''+intToStr(iE_id)+''''; 
      

  13.   


    没错,E_id是整型数,但确实要在后边加上''(两个单引号),该带有"(双引号)的SQL语句才能执行,否则会提示:
    “不正常地定义参数对象。提供了不一致或不完整的信息”
      

  14.   


    因为where E_id=' '  本身需要单引号,而在DELPHI中如果想让字符串中出现单引号就要用三个单引号如:'my phone is '''12345''''其实就是字符串:my phone is '12345'然而对于双引号的使用还不太明白,思考中......
      

  15.   

    最好的方法:
    aCommand.SQL.Add('Update A1 Set asd = :a Where asd = ' + QuotedStr('345dg')); 
    aCommand.Parameters[0].Value := '15"AOC';
    aCommand.Execute;
      

  16.   

    正确答案: 
    aCommand.CommandText := 'Update A1 Set asd = :a Where asd = ' + QuotedStr('345dg'); 
    aCommand.Parameters[0].Value := '15"AOC'; 
    aCommand.Execute;
      

  17.   

    sql:='Update Maintenance Set Equ='+QuotedStr('15')+'+CHAR(34)+'+QuotedStr('AOC')+' where E_id=3'