我用的是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'
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'
尽量避免用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')]);
你的那个15英寸不是可以按住shift+'打出来吗,就不会出现问题了啊
function encode(const S: string): string;
begin
Result := StringReplace(S, '''', '''''', [rfReplaceAll]);
......
end;
GO
SELECT Equ FROM Maintenance WHERE Equ='"''\%'
GO
可以确认在SQLServer中需要转义的只有单引号,也就是说在SQL语句中两个连续的单引号代表一个单引号,双引号和斜线无须转义
aQuery.SQL.Add('Update A1 Set asd=''15''''AOC'' Where asd=''345dg''');
不要使用函数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';
http://zhidao.baidu.com/question/11460337.html?fr=qrl
英寸的符号就是shift+",在SQL中怎么回有问题呢?不解!
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的最后还要加上''(两个单引号)才可以,
但是为什么还要加上''(两个单引号)才可以用"(双引号)呢,还有请前辈们指教!
sql := 'Update Maintenance Set Equ=' + sEqu + ' where E_id='+intToStr(iE_id)+'';
最后的''要使用4个单引号:'''',才可以通过.
可以看出E_id字段是数字类型的那最后的+''可以省略,如果是字符型的:
sql := 'Update Maintenance Set Equ=' + sEqu + ' where E_id='''+intToStr(iE_id)+'''';
没错,E_id是整型数,但确实要在后边加上''(两个单引号),该带有"(双引号)的SQL语句才能执行,否则会提示:
“不正常地定义参数对象。提供了不一致或不完整的信息”
因为where E_id=' ' 本身需要单引号,而在DELPHI中如果想让字符串中出现单引号就要用三个单引号如:'my phone is '''12345''''其实就是字符串:my phone is '12345'然而对于双引号的使用还不太明白,思考中......
aCommand.SQL.Add('Update A1 Set asd = :a Where asd = ' + QuotedStr('345dg'));
aCommand.Parameters[0].Value := '15"AOC';
aCommand.Execute;
aCommand.CommandText := 'Update A1 Set asd = :a Where asd = ' + QuotedStr('345dg');
aCommand.Parameters[0].Value := '15"AOC';
aCommand.Execute;