【问题标题】:How do you use the SQLQuery component to run multiple queries?如何使用 SQLQuery 组件运行多个查询?
【发布时间】:2015-03-13 21:04:35
【问题描述】:

我有一个 ListBox 显示数据库中单个字段 (first) 的所有记录。当用户单击 ListBox 项目时,我希望显示 db (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 组件以及它们如何与底层数据库交互了解不足,无法知道发生了什么。

[附注数据库是 sqlite3,如果这很重要,我使用的是 Lazarus 而不是 Delphi,如果这很重要。]

【问题讨论】:

  • 在重试之前是否关闭查询?
  • @Graymatter--不,不知道我需要这样做。刚试过;一切正常。如果你把它作为回应(也许有一点解释为什么我需要这样做?我是新手。)我可以接受它作为答案......谢谢!
  • 通常任何可以是opened的东西也可以是closed。
  • 谢谢,杰瑞 :-) ...我只是想知道为什么打开的东西需要关闭并重新打开?

标签: database delphi lazarus


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    相关资源
    最近更新 更多