如何使用 SQLQuery 组件进行 运行 多个查询?

How do you use the SQLQuery component to run multiple queries?

我有一个列表框显示数据库中单个字段 (first) 的所有记录。当用户单击 ListBox 项目时,我希望显示数据库 (last) 中不同字段的值,即相同的记录。我的代码 ListBox OnClick 事件代码是:

 SQLQuery2.SQL.Text:='SELECT * FROM Names WHERE first= :FIRST';
 SQLQuery2.Params.ParamByName('FIRST').AsString := ListBox1.Items[ListBox1.ItemIndex];
 SQLQuery2.Open;
 ShowMessage('You selected '+SQLQuery2.FieldByName('last').AsString);

当您单击某个项目时,预期的字段会出现在 MessageBox 中。但是,如果您随后单击不同的项目,则不会发生任何变化——MessageBox 显示原始字段。

我不太了解 SQLQuery 组件以及它们如何与底层数据库交互以了解发生了什么。

[P.S。数据库是 sqlite3,如果重要的话,我使用的是 Lazarus 而不是 Delphi,如果重要的话。]

您需要先关闭您的查询,然后才能再次打开它。如果您查看 TDataSet 上的 Open 代码,它会将 Active 属性 设置为 true。 Active 的设置代码在做任何工作之前首先检查值是否不同:

procedure TDataSet.SetActive(Value: Boolean);
begin
  ..
    if Active <> Value then
    begin
    end;
end;

因此,在您的情况下,活动 属性 已经为真,代码刚刚退出。