【问题标题】:ADODB : Number of modified records with parameterized queryADODB:参数化查询的修改记录数
【发布时间】:2011-11-23 13:41:40
【问题描述】:

我在 Delphi 7 中使用 ADODB,对于 UPDATE 查询,我使用 TADOConnection Execute 过程“recordsAffected”变量获取修改记录的数量。 像这样:

 MyConnexion.Execute(sReq, iResReq, [eoExecuteNoRecords]);

iResReq 是修改后的记录号。

现在我想使用带有参数化 SQL 的参数化查询:

SQL.Add('UPDATE TABLE SET NAME="TEST" WHERE NAME=:PARAM);
Parameters.ParamByName('PARAM').text:='Smith';

但我真的不知道如何找到修改后的记录数。 除了我的问题,你知道关于 ADODB 参数化查询的好教程吗?

【问题讨论】:

  • 非常好!我没有意识到 ExecSQL 是一个 FUNCTION 并返回修改记录的数量。
  • 正如 Mikael 在他的回答中指出的那样,TADOCommand 更适合此目的。 TADOQuery.ExecSQL 从其祖先 TCustomADODataSet 内部调用 TADOCommand.Execute。所以我更喜欢TADOCommand ;)
  • 好的,我有一个可行的答案。但是“TADOCommand.execute”、“TADOQuery.execSQL”……之间的“好”选择并不明显。
  • 很难说你以后会用那个数据库访问对象做什么。如果您还想将它用于某些数据获取,那么TADOQuery 是“正确”的选择。如果您只希望它用于不返回任何数据的查询(如 INSERT、UPDATE、CREATE),那么 TADOCommand 是“正确的”。正如我之前在评论中提到的,TADOQuery 在内部使用 TADOCommand ExecSQL 函数调用。

标签: delphi ado adodb


【解决方案1】:

使用 TADOCommand 你可以做这样的事情。

var
    RecordsAffected: Integer;
begin
    ADOCommand1.CommandText := 'UPDATE TABLE SET NAME="TEST" WHERE NAME=:PARAM';
    ADOCommand1.Parameters.ParamByName('PARAM').Value:='Smith';
    ADOCommand1.Execute(RecordsAffected, EmptyParam);

如果您使用 ExecSQL,也可以使用 TADOQuery(正如 TLama 在评论中提到的那样)。

【讨论】:

  • 你是对的我的代码是错误的(我会编辑它)! CommandText 允许参数?
  • @Mikael,您可以使用 TADOQuery 执行更新语句,无论如何 +1 ;)
  • @TLama - 你是对的。刚测试过。很快就会更新答案:)。
  • 什么是“EmptyParam”?
  • 太棒了!喜欢 docwiki 中的这句话:“Linux 下也存在编组接口,但我们现在不能腾出资源来记录它们。”......这一定是在 Kylix 时代写的。
猜你喜欢
  • 1970-01-01
  • 2017-10-27
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多