无法为包含记录数组的对象赋值

时间:2018-02-08 22:05:03

标签: arrays delphi assign records

我正在编写一个包含记录数组的简单对象。就像发票一样。(ID,日期,客户名称和有关物品的记录数组)。

cart.row[0].code:='333';

因为我试图更改一条记录的值,所以一切都很好。我找到了3种方法。首先,第二个工作正常,但我想简化修改此记录值的代码,如下所示:

procedure TForm1.Button1Click(Sender: TObject);
var
  Arows: Trows;
begin
  Cart:=Tcart.Create(0);
  cart.custName:='Customer 1';
  cart.Suma:=5.55;
  cart.Payed:=false;
  Arows.code:='123';
  cart.setrow(0,Arows);  // this way working
  cart.setcode(0,'333');   // this way also working
  cart.row[0].code:='555';      //this way doesn''t change value. How to make it work?
  memo1.Lines.Text:=cart.carttostr;
end;

但它不起作用。

我缺少什么?

以下是代码:

git clone http://github.com/Ruslan-B/AR.Drone.git   
cd AR.Drone   
git submodule update --init   

1 个答案:

答案 0 :(得分:6)

它不起作用,因为您的Row[]属性按值返回TRows记录 ,这意味着调用者会收到副本原始记录。您对副本所做的任何修改都不会反映在原始中。

您需要将副本分配回属性以应用更改:

procedure TForm1.Button1Click(Sender: TObject);
var
  Arows: Trows;
begin
  ...
  Arows := cart.row[0];
  Arows.code:='555';
  cart.row[0] := Arows; // <-- equivalent to 'cart.setrow(0,Arows);'
  ...
end;