环境 delphi7 + SQL server 2000 表:CUNFEN XM(varchar) JSF(bigint)
李连杰 5
李 -5
张 三 10
有如下语句:
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add('SELECT XM,JSF+:FZ AS JSF');
SQL.Add('FROM CUNFEN');
SQL.Add('WHERE XM=:XM');
Parameters.ParamByName('FZ').Value:=25;
Parameters.ParamByName('XM').Value:='李连杰';
open;
end; 返回结果:
XM JSF
李 20 如改写成
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add('SELECT XM,JSF+25 AS JSF');
SQL.Add('FROM CUNFEN');
SQL.Add('WHERE XM=:XM');
Parameters.ParamByName('XM').Value:='李连杰';
open;
end; 或
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add('SELECT XM,JSF+:FZ AS JSF');
SQL.Add('FROM CUNFEN');
SQL.Add('WHERE XM=''李连杰''');
Parameters.ParamByName('FZ').Value:=25;
open;
end;
则返回结果均为:
XM JSF
李连杰 30 用 SQL server 2000 的“事件探查器”跟踪发现第一种写法只传给 SQL server 2000
参数“XM”的第一个字,即“李连杰”的“李”字,所以结果出错。
可是为什么会这样呢?难道是Delphi7的BUG?可是我刚刚打了1.1的升级补丁啊。哪位高手知道原因和解决方法?
十万火急!!!!
李连杰 5
李 -5
张 三 10
有如下语句:
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add('SELECT XM,JSF+:FZ AS JSF');
SQL.Add('FROM CUNFEN');
SQL.Add('WHERE XM=:XM');
Parameters.ParamByName('FZ').Value:=25;
Parameters.ParamByName('XM').Value:='李连杰';
open;
end; 返回结果:
XM JSF
李 20 如改写成
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add('SELECT XM,JSF+25 AS JSF');
SQL.Add('FROM CUNFEN');
SQL.Add('WHERE XM=:XM');
Parameters.ParamByName('XM').Value:='李连杰';
open;
end; 或
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add('SELECT XM,JSF+:FZ AS JSF');
SQL.Add('FROM CUNFEN');
SQL.Add('WHERE XM=''李连杰''');
Parameters.ParamByName('FZ').Value:=25;
open;
end;
则返回结果均为:
XM JSF
李连杰 30 用 SQL server 2000 的“事件探查器”跟踪发现第一种写法只传给 SQL server 2000
参数“XM”的第一个字,即“李连杰”的“李”字,所以结果出错。
可是为什么会这样呢?难道是Delphi7的BUG?可是我刚刚打了1.1的升级补丁啊。哪位高手知道原因和解决方法?
十万火急!!!!
begin
close;
sql.Clear;
sql.Add('select xm, jsf+:fz as jsf');
sql.Add(' from cunfen');
sql.Add(' where xm=:xm');
parameters.ParamByName('fz').Value := 25;
parameters.ParamByName('xm').Size := 6;
parameters.ParamByName('xm').Value := '李连杰';
open;
end;
fz:integer;
xm:string;
fz=25;
xm='李连杰';
strsql:='select xm, jsf+'+inttostr(fz)+' as jsf from cunfen where xm='''+xm+'''';
adoquery1.sql.clear;
adoquery1.sql.add(strsql);
.....
SQL.Close;
SQL.Clear;
SQL.Add('SELECT XM,JSF+:FZ AS JSF');
SQL.Add('FROM CUNFEN');
SQL.Add('WHERE XM=:XM');
Parameters.ParamByName('FZ').Value:=25;
Parameters.ParamByName('XM').Value:='李连杰';
open;
end;不会吧??我测试没问题啊
begin
SQL.Clear;
SQL.Add('SELECT XM,JSF+:FZ AS JSF');
SQL.Add('FROM CUNFEN');
SQL.Add('WHERE XM=:XM');
Parameters.ParamByName('FZ').Value:=25;
Parameters.ParamByName('XM').AsString:='李连杰'; //have a try
open;
end;
提醒qybao,"adoquery"没有Parameters.ParamByName('XM').AsString的用法,这句话运行一定通不过的,你一定是和BDE的"query"弄混了。