if (length(temp)<20) and (length(stemp)<20) then
begin
with ADOQuery1 do
begin
close;
SQL.Clear;
SqL.Add('insert into mytable values(:k,:m,:n);');
Parameters.ParamByName('k').Value :=temp;
Parameters.ParamByName('m').Value :=stemp;
Parameters.ParamByName('n').Value :=name;
execSQL;
end;
end;为什么 最后一个字段的值全部是adoquery1呢。 name 是动态获取,值是没有问题的哦,而且也没有超过字段的长度。
begin
with ADOQuery1 do
begin
close;
SQL.Clear;
SqL.Add('insert into mytable values(:k,:m,:n);');
Parameters.ParamByName('k').Value :=temp;
Parameters.ParamByName('m').Value :=stemp;
Parameters.ParamByName('n').Value :=name;
execSQL;
end;
end;为什么 最后一个字段的值全部是adoquery1呢。 name 是动态获取,值是没有问题的哦,而且也没有超过字段的长度。
name是被动态赋值的啊 。
不然程序会随机把你的值插入字段里面
if (length(temp) <20) and (length(stemp) <20) then
begin
with ADOQuery1 do
begin
close;
SQL.Clear;
SqL.Add('insert into mytable values(:k,:m,:n);');
Parameters.ParamByName('k').Value :=temp;
Parameters.ParamByName('m').Value :=stemp;
Parameters.ParamByName('n').Value :=name; //编译器会认为是ADOQuery1.name,故结果肯定为'ADOQuery',写成Name1即可
execSQL;
end;
end;
把with 去掉或者在name加上所属单元即可解决问题。f (length(temp) <20) and (length(stemp) <20) then
begin
adoquery1.close;
adoquery1.SQL.Clear;
adoquery1.SqL.Add('insert into mytable values(:k,:m,:n);');
adoquery1.Parameters.ParamByName('k').Value :=temp;
adoquery1.Parameters.ParamByName('m').Value :=stemp;
adoquery1.Parameters.ParamByName('n').Value :=name;
adoquery1.execSQL;
end;
//或Parameters.ParamByName('n').Value :=name替换成
Parameters.ParamByName('n').Value :=unit1.name
begin
showmessage(Name);
end;这样就明白了,因为你利用了with方式