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;
私が何をしても問題ありません.2番目のSQLステートメントのパラメーターを解析しないため、「valueY」パラメーターを名前でバインドできません。
2 つの回避策が考えられます。
qry.Params自分で手動でリストを作成します。qry2 つのコマンドの間にオブジェクトを破棄して再作成します。
私はこれらのいずれかを行う必要はありません。qryオブジェクトに、新しい SQL ステートメントがそのプロパティに割り当てられるたびにパラメータを再解析するプロパティまたは何かがあるのではないでしょCommandTextうか?