0

我有这样的记录:

Tcustomer=record
  Name: string;
  IDNumber: Integer;
  IsMarried: boolean;
end;

我有一个TCustomers_Manager存储所有客户列表的类。是否有可能有这样的程序:

Procedure ChangeCustomer(CustomerIndex: integer; field: string; value);

这设置了该特定字段的值。例如:

ChangeCustomer(1, 'Name','John');

我该如何实施?

更新:为了澄清,我的问题基本上分为两部分:

1)如何将字段名称(字符串)映射到记录中的实际字段?

2)是否可以传递具有不同类型的值?或者我应该传递一个类型并对其进行类型转换(比如传递一个字符串然后使用strtoint()

4

2 回答 2

3

我会使用 TClientDataSet。

  1. 使用字段 ID、名称等创建 TClientDataSet。
  2. 打开数据集,使用 InsertRecord 或 Insert/Post 填充
  3. 使用定位查找记录
  4. 使用 FieldByName('FieldName').Value 访问或更改数据

或者您可以使用任何 MemoryDataSet 组件并以相同的方式使用它。

第二种方法是将记录转换为类,将字段声明为已发布并使用 SetPropValue。

如果你想传递任何值,你可以使用 Variant。但是您必须在分配之前检查类型。

于 2011-05-13T07:28:47.563 回答
1

例如,您可以这样做(假设lst: TList<TCustomer>如您在评论中所说):

Procedure ChangeCustomer(index: integer; i: byte; value: variant)
begin
    case (i) of
        0: lst[index].Name := value;
        1: lst[index].IDNumber := value;
        2: lst[index].IsMarried := value;
    end;
end;

您可以使用类型(或枚举)代替i: byte. 我很久不使用Delphi,所以以我的例子作为一个想法,而不是像Delphi 应用程序!

于 2011-05-13T06:57:02.793 回答