我正在使用 Delphi XE2 和 TSQLQuery 对象。我第一次使用它就可以工作。如果我立即重用它,那么它不会解析新 SQL 的参数并重建qry.Params
列表:
var
qry: TSQLQuery;
begin
qry := TSQLQuery.Create(nil);
try
qry.MaxBlobSize := -1;
qry.SQLConnectin := AnExistingConnection;
qry.CommandText := 'select field1 from table1 where fieldX = @valueX';
qry.ParamByName('valueX').Value := 1;
qry.Open;
// ... use data ...
qry.Close;
qry.Params.Clear; // <- works the same with or without this
qry.CommandText := 'select field2 from table2 where fieldY = @valueY';
qry.ParamByName('valueY').Value := 2; // <- Error: 'valueY' Param not found
qry.Open;
finally
FreeAndNil(qry);
end;
end;
我做什么都没关系,它不会解析第二条 SQL 语句的参数,所以我不能按名称绑定“valueY”参数。
我可以想到两种解决方法:
- 自己手动构建
qry.Params
列表。 qry
在两个命令之间销毁并重新创建对象。
我不应该做这两件事。也许对象上有一个属性或某些东西qry
会导致它在每次将新的 SQL 语句分配给它的CommandText
属性时重新解析参数?