【问题标题】:Insert data by TADOCommand in DelphiDelphi中通过TADOCommand插入数据
【发布时间】:2016-11-09 14:10:20
【问题描述】:

我有一个包含四个字段的表,其中一个字段是主键。 当我运行以下命令时:

var
  iAffectedRows: integer;
begin
  ADOCommand1.CommandText := 'insert into table_1(Field_1, Field_2, Field_3)   values(:A_Field_1, :A_Field_2, :A_Field_3)';      

  ADOCommand1.Parameters.FindParam('A_Field_1').Value := '100';
  ADOCommand1.Parameters.FindParam('A_Field_2').Value := '200';
  ADOCommand1.Parameters.FindParam('A_Field_3').Value := '300';

  ADOCommand1.Execute(iAffectedRows);
end;

结果是:

Field_1 值为 0。

(这个结果是由于运行命令:ADOCommand1.Execute(iAffectedRows)

但是使用这个命令一切都是正确的:ADOCommand1.Execute()

这个问题有解决办法吗?

【问题讨论】:

    标签: delphi ado delphi-xe5


    【解决方案1】:

    看来您已经有了解决方案 - 调用 Execute() 的无参数版本。

    function Execute: _Recordset;
    

    您正在调用Execute() 的单参数版本,它不会输出受影响的行数:

    function Execute(const Parameters: OleVariant): _Recordset;
    

    通过将iAffectedRows 传递给此版本,您将用iAffectedRows 最初包含的任何值替换第一个参数值,恰好是0。

    如果您想接收受影响的行数,则需要使用 Execute() 的 2 参数版本:

    function Execute(var RecordsAffected: Integer; const Parameters: OleVariant): _Recordset;
    

    例如:

    var
      iAffectedRows: integer;
    begin
      ADOCommand1.CommandText := 'insert into table_1(Field_1, Field_2, Field_3) values(:A_Field_1, :A_Field_2, :A_Field_3)';
    
      ADOCommand1.Parameters.FindParam('A_Field_1').Value := '100';
      ADOCommand1.Parameters.FindParam('A_Field_2').Value := '200';
      ADOCommand1.Parameters.FindParam('A_Field_3').Value := '300';
    
      ADOCommand1.Execute(iAffectedRows, EmptyParam);
    end;
    

    或者:

    var
      iAffectedRows: integer;
    begin
      ADOCommand1.CommandText := 'insert into table_1(Field_1, Field_2, Field_3) values(:A_Field_1, :A_Field_2, :A_Field_3)';    
      ADOCommand1.Execute(iAffectedRows, VarArrayOf('100', '200', '300'));
    end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多