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;

我已确保:artist参数存储 的当前项的值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 回答