: 그것은 그런 대부분의 경우 가장 역동적 인 기술이기 때문에 How to use “Sender” parameter with “As” operator for more then one class at a timeTypInfo RTTI 메서드를 사용하여 하위 속성 항목에 값을 설정하는 방법? 내 질문에
나는 레미 Lebeau의 대답을 선택합니다. 그것은 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를 사용해야합니다. 위의 코드에서 TString을 가져 왔기 때문에 "Invalid Property Type"오류가 발생하고 나중에 일반 문자열을 설정하려고합니다.
GetPropInfo를 사용하여 SQL.Text에 도달하는 방법은 무엇입니까? SQL 속성이있는 TIBQuery와 TZQuery의 공통 조상이 있습니까? 따라서 함수 매개 변수의 TDataSet 대신 변경할 수 있습니까?
'SQLstrings : = TStringList.Create' 로컬 문자열 목록을 만든 다음'SQLstrings.Text : = SQL'을 실행하고'SQLstrings'을'SetPropValue'에 전달할 수 없습니까? –
'SQL' 인스턴스는'TStrings (GetObjectProp (DataSet, 'SQL'))'로 간단하게 얻을 수 있습니다. 'GetPropInfo'를 사용해야합니까? 읽을 수없는 * 코드 조각입니다. – TLama
'PPropInfo'가 아닌'String'으로 속성을 요청하면 속성을 찾을 수없는 경우 예외가 발생합니다. –