我的意图:
当用户选择艺术家时, discography 组合框将填充特定艺术家所拥有的唱片。
守则:
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
param存储cbArtist
当前项的值,但在编译应用程序时,cbDiscography
仍未填充。
我能做些什么工作?
答案 0 :(得分:2)
打开查询时,任何参数的值都会传递给数据库引擎。在关闭并重新打开数据集之前,更改活动查询对象上的参数值无效。
猜猜你是不是在做最后一步,所以将事件处理程序方法更改为:
procedure Tmain.cbArtistChange(Sender: TObject);
begin
qDisco.ParamByName('artist').Value := cbArtist.Items[cbArtist.ItemIndex];
qDisco.Close;
qDisco.Open;
end;
如您所见,这涉及到一个完整的数据库往返,以检索与当前艺术家相关的所有唱片目录。