我有许多不同的方法可以使用Delphi的RTTI创建,调用和设置不同对象的属性。但现在我遇到了一个错误,设置TDateTime
会触发错误,如:"无法将变量转换为double"。在搜索此错误时Google无法提供帮助。
到目前为止,我定义了任何类型的对象,例如:
TExample = class
private
FDateField : TDateTime;
published
property DateField : TDateTime read FDateField write FDateField;
end;
然后我将此对象放在TObjectList
中,然后循环一些与问题无关的内部逻辑。但是当我来到DateField
属性时,它会触发错误。我试图像这样设置它:
objPropValue := '12/02/2018 12:25:00';
objPropName := 'DateField';
if IsPublishedProp(parameterObject, objPropName) then
begin
SetPropValue(parameterObject, objPropName, objPropValue); <- doesn't work on DateField
end;
这只是一个硬编码示例,objPropValue
和Name
在循环中设置,可以是任何其他类型。我也尝试了不同的格式,但我似乎无法找到正确的方法。
答案 0 :(得分:1)
尽管出现错误消息,但您要在此处尝试将字符串分配给日期,而您无法做到。如果你做了这个
objPropValue := '12/02/2018 12:25:00';
objPropName := 'DateField';
if IsPublishedProp(parameterObject, objPropName) then
begin
SetPropValue(parameterObject, objPropName, StrToDateTime(objPropValue));
end;
它会正常工作。当然,这仅仅是为了说明。如果objPropValue是一个变体(你不会显示),你可以使用
objPropValue := StrToDateTime('12/02/2018 12:25:00');
objPropName := 'DateField';
if IsPublishedProp(parameterObject, objPropName) then
begin
SetPropValue(parameterObject, objPropName, objPropValue);
end;
代替。