Delphi:一个程序可以更改记录的所有字段?
我有这样的记录:
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()
)
I have a record like this:
Tcustomer=record
Name: string;
IDNumber: Integer;
IsMarried: boolean;
end;
And I have a TCustomers_Manager
class that stores a list of all the customers. Is it possible to have a procedure like this:
Procedure ChangeCustomer(CustomerIndex: integer; field: string; value);
That sets the value for that specific field. For example:
ChangeCustomer(1, 'Name','John');
How can I implement this?
Update: To clarify, my question is basically in 2 parts:
1) How can I map the field name (in string) to the actual field in record?
2) Is it possible to pass a value that has different types? Or should I pass a single type and type cast it (like passing a string and then using strtoint()
)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我会使用 TClientDataSet。
或者您可以采用任何 MemoryDataSet 组件并将其用于同样的方式。
第二种方法是将记录转换为类,将字段声明为已发布并使用 SetPropValue。
如果你想传递任何值,你可以使用 Variant。但你必须在分配之前检查类型。
I would use TClientDataSet.
Or you can take any MemoryDataSet component and use it in same way.
Second way is to convert record to class, declare Fields as published and use SetPropValue.
If you want to pass any Value you can use Variant. But you have to check types before assign.
例如,您可以这样做(假设
lst: TList
正如您在评论中所说):您可以使用类型(或枚举)代替
i: byte< /代码>。
我很长时间没有使用 Delphi,所以将我的示例作为一个想法,而不是像 Delphi 应用程序!
You could, for example, do this (assuming
lst: TList<TCustomer>
as you said in a comment):You could use a type (or enum) in place of
i: byte
.I dont't use Delphi from long time, so take my example as an idea, not like a Delphi app!!