在我的问题中: 如何一次将“Sender”参数与“As”运算符一起用于一个以上的类
我选择 Remy Lebeau's Answer 是因为它是大多数情况下最具活力的技术。它使用 RTTI TypInfo 类。
但是当我在使用这个类时,另一个问题来了: 我们如何设置子属性值?
function TRemote.UpdateQuery(DataSet: TDataSet; SQL: String): Boolean;
var
PropInfo: PPropInfo;
begin
{ atualiza o código SQL padrão de um dataSet de consulta tipo View }
PropInfo := GetPropInfo(DataSet, 'SQL', []);
if not Assigned(PropInfo) then
begin
Result := False;
Exit;
end;
try
DataSet.Close;
SetPropValue(DataSet, PropInfo, SQL);
DataSet.Open;
Result := True;
except
Result := False;
end;
end;
示例:我有一个 TIBQuery,我想更新 SQL 属性的文本。但是 SQL 属性是一个 TStrings 类,所以我必须使用 SQL.Text。在上面的代码中,它会引发错误“无效的属性类型”,因为我得到了一个 TStrings,后来我尝试设置一个普通的字符串。
如何使用 GetPropInfo 访问 SQL.Text? 是否存在具有 SQL 属性的 TIBQuery 和 TZQuery 的共同祖先,所以我可以更改为,而不是函数参数中的 TDataSet?