如何在TSQLQuery.SQL中使用绑定参数

时间:2013-07-23 17:13:46

标签: sql pascal lazarus

我使用Lazarus对象而不是以编程方式运行几个查询(好好尝试),我有我的数据库连接和事务设置并与我的查询交互并且正在读取和初始查询到TDBGrid。现在我想要做的是能够单击网格单元格并选择要在查询中使用的ID值。

我有一个TSQLQuery对象设置并链接到一个源,我将其输入到SQL属性中:

SELECT * FROM tbl_accounts
WHERE tbl_accounts.ClientID = :AccID

但是我无法弄清楚如何将参数传递给对象......我的程序如下所示:

procedure TtcheckHome.accResultsCellClick(Column: TColumn);
  begin
  selected := listAccounts.Fields[0].AsString;
  // accSelect.SQL.Text := 'SELECT * FROM tbl_accounts WHERE tbl_accounts.ClientID = 2';
  accSelect.Params.ParamByName('AccID').AsString := selected;
  textEdit.Text := accSelect.FieldByName('AccountNumber').AsString;
end;

这总是返回accSelect:字段名称AccountNumber未找到,如果我删除对Params的任何引用,并将ID硬编码到查询中它完美地工作。这让我相信我使用绑定参数的方法是错误的!我错过了什么?

1 个答案:

答案 0 :(得分:0)

使用参数值刷新查询:

accSelect.Close;
accSelect.Params.ParamByName('AccID').AsString := selected;
accSelect.Open;

如果您不想继续关闭并重新打开相同的查询,我会怎么做:

if accSelect.Params.ParamByName('AccID').AsString <> selected then
begin
  accSelect.Close;
  accSelect.Params.ParamByName('AccID').AsString := selected;
end;
if not accSelect.Active then
  accSelect.Open;