这是使用SQL参数的正确方法吗?

时间:2013-02-03 10:05:42

标签: delphi delphi-xe3

我的意图:

当用户选择艺术家时, 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仍未填充。

我能做些什么工作?

1 个答案:

答案 0 :(得分:2)

打开查询时,任何参数的值都会传递给数据库引擎。在关闭并重新打开数据集之前,更改活动查询对象上的参数值无效。

猜猜你是不是在做最后一步,所以将事件处理程序方法更改为:

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

如您所见,这涉及到一个完整的数据库往返,以检索与当前艺术家相关的所有唱片目录。