1

私の意図:

ユーザーがアーティストを選択すると、ディスコグラフィコンボ ボックスが特定のアーティストのディスコグラフィでいっぱいになります。


コード:

qDisco ( TSQLQuery) は、cbDisco ( ) にバインドされたデータTComboBoxであり、次の SQL が含まれています。

SELECT DISTINCT discography
FROM Album
INNER JOIN Artist 
ON Album.artist_id = Artist.id
WHERE Artist.name = :artist;

:artistパラメータは、次のコードによって設定されます。

procedure Tmain.cbArtistChange(Sender: TObject);
begin
  qDisco.ParamByName('artist').Value := cbArtist.Items[cbArtist.ItemIndex];
end;

:artistparam が の現在の項目の値を格納することを確認しましたcbArtistが、アプリケーションをコンパイルすると、値cbDiscographyが入力されないままになります。

これを機能させるにはどうすればよいですか?

4

1 に答える 1

2

クエリを開くと、任意のパラメーターの値がデータベース エンジンに渡されます。アクティブなクエリ オブジェクトのパラメーター値を変更しても、データ セットを閉じて再度開くまでは効果がありません。

最後のステップを行っていないと思うので、イベント ハンドラー メソッドを次のように変更します。

procedure Tmain.cbArtistChange(Sender: TObject);
begin
  qDisco.ParamByName('artist').Value := cbArtist.Items[cbArtist.ItemIndex];
  qDisco.Close;
  qDisco.Open;
end;

ご覧のとおり、これには、現在のアーティストに関連付けられているすべてのディスコグラフィー レコードを取得するための完全なデータベース ラウンドトリップが含まれます。

于 2013-02-03T18:28:12.987 に答える