0

プログラムではなくLazarusオブジェクトを使用していくつかのクエリを実行しています(うまく行おうとしています)。DB接続とトランザクションをセットアップし、クエリとやり取りして、TDBGridに最初のクエリを読み込んでいます。ここでやりたいことは、グリッド セルをクリックして、クエリで使用する ID 値を選択できるようにすることです。

TSQLQuery オブジェクトをセットアップしてソースにリンクし、これを SQL プロパティに入力しました。

SELECT * FROM tbl_accounts
WHERE tbl_accounts.ClientID = :AccID

ただし、パラメーターをオブジェクトに渡す方法がわかりません...私の手順は次のようになります。

procedure TtcheckHome.accResultsCellClick(Column: TColumn);
  begin
  selected := listAccounts.Fields[0].AsString;
  // accSelect.SQL.Text := 'SELECT * FROM tbl_accounts WHERE tbl_accounts.ClientID = 2';
  accSelect.Params.ParamByName('AccID').AsString := selected;
  textEdit.Text := accSelect.FieldByName('AccountNumber').AsString;
end;

これは常に accSelect で返されます: Field name AccountNumber not found, ただし、Params への参照を削除し、ID をクエリにハードコーディングすると、完全に機能します。これは、バインドされたパラメーターを使用するための私の方法が間違っていると私に信じさせます! 私は何を逃したのですか?

4

1 に答える 1

0

パラメータ値を使用してクエリを更新するには:

accSelect.Close;
accSelect.Params.ParamByName('AccID').AsString := selected;
accSelect.Open;

同じクエリを継続的に閉じて再度開きたくない場合は、次のようにします。

if accSelect.Params.ParamByName('AccID').AsString <> selected then
begin
  accSelect.Close;
  accSelect.Params.ParamByName('AccID').AsString := selected;
end;
if not accSelect.Active then
  accSelect.Open;
于 2013-07-24T12:46:30.880 に答える