unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, DBTables;type
TForm1 = class(TForm)
Button1: TButton;
ADOQuery1: TADOQuery;
Query1: TQuery;
Button2: TButton;
Database1: TDatabase;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('update Northwind..Products set ProductName=''ChaiE`'' where ProductID = :var ');
parameters[0].Value:=1;
execsql;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
with query1 do
begin
close;
sql.Clear;
sql.Add('update Northwind..Products set ProductName=''ChaiE`'' where ProductID = :var ');
params[0].AsInteger:=1;
execsql;
end;
end;end. 以上是存在BUG的代码,执行报错,问题出在ProductName=''ChaiE`''这句上,去掉''ChaiE`''中E后面的“`”小撇就不会报错,那个小撇就是键盘上数字1左面的按键。
用Delphi7在MSSQL7.0、MSSQL2000测试都如此。请教解决方法!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, DBTables;type
TForm1 = class(TForm)
Button1: TButton;
ADOQuery1: TADOQuery;
Query1: TQuery;
Button2: TButton;
Database1: TDatabase;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('update Northwind..Products set ProductName=''ChaiE`'' where ProductID = :var ');
parameters[0].Value:=1;
execsql;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
with query1 do
begin
close;
sql.Clear;
sql.Add('update Northwind..Products set ProductName=''ChaiE`'' where ProductID = :var ');
params[0].AsInteger:=1;
execsql;
end;
end;end. 以上是存在BUG的代码,执行报错,问题出在ProductName=''ChaiE`''这句上,去掉''ChaiE`''中E后面的“`”小撇就不会报错,那个小撇就是键盘上数字1左面的按键。
用Delphi7在MSSQL7.0、MSSQL2000测试都如此。请教解决方法!
sql.Add(Format('update Northwind..Products set ProductName=''ChaiE`'' where ProductID =%d ',[1])); //这个1可用变量
foxyy8888(SY强身,YY强国) ( ) 信誉:94 Blog 2006-10-06 20:30:00 得分: 0
主要问题应该在`上吧?
==============================================================================拜托,我下面的说明中把问题说的很清楚了,现在要研究解决方法!
keiy() ( ) 信誉:105 Blog 2006-9-29 20:14:44 得分: 0
实在不行,不要用参数了,用字串相加或用format吧:
sql.Add(Format('update Northwind..Products set ProductName=''ChaiE`'' where ProductID =%d ',[1])); //这个1可用变量
============================================================除了以上大家都能知道的绕道解决方法外,有没有更直接的解决方法!
这样当要使用双引和倒引的时候就需要跟单引一样用两个,但是该函数又没处理这种重复
相当于实际使用中无法使用双引和倒引解决办法只有修改ADODB.pas单元中的代码,将
Literals = ['''', '"', '`'] 改为 Literals = [''''] 后重新编译
BDE的是修改DB