Fórum Obter todas as propriedades de uma classe #458665

17/10/2013

0

Olá pessoal!

Estou iniciando alguns testes com JSON/REST no DataSnap e me deparei com uma situação.
Criei uma classe, com exatas 105 propriedades correspondentes a todos os campos de uma tabela.
No servidor DataSnap, eu devo ler os registros da tabela e gravar nesta classe, que será retornada com resultado da função via JSON.
Aí que está o "problema". Pra facilitar minha vida, eu gostaria de fazer o loop em todos os campos da tabela e gravar sua respectiva propriedade da classe.
Desta forma eu não precisaria igualar as 105 propriedades da classe aos 105 campos da tabela manualmente. Sem falar que se houver alguma variação do meu select, essa função iria ser genérica para todas minhas consultas, nesta mesma tabela.

A ideia que tive seria mais ou menos representada pelo código abaixo:

var
     iCampo: Integer;
begin
     for iCampo := 0 to Query.FieldCount - 1 do  // Leio todos os campos da tabela;
     begin
          if Query.Fields[iCampo].FieldName = 'Propriedade_da_Classe' then // Preciso pegar o nome da propriedade, tipo um cast...
             // Classe.Propriedade... := Campo da Tabela;  // Aqui o sistema iria jogar cada campo da tabela em sua respectiva propriedade da classe;
     end;
end;


Existe alguma forma de fazer isso?

Desde já agradeço.
Marcos Oliveira

Marcos Oliveira

Responder

Posts

17/10/2013

Pjrm1470

Não tenho certeza do funcionamento nas versões mais novas, pois isso é lá da época da CodeGear.
adicione a uses:
uses
  TypInfo;

Nela temos a função
SetPropValue(SeuObjeto, 'Nome da propriedade', 'Valor');

Há um Overload dela também, mas não tive tempo de implementar
Aqui vai um outro metodo:
var 
  piPropInfo: PPropInfo;
begin
    piPropInfo := GetPropInfo(ClassInfo, 'Nome da sua propriedade');
    if Assigned(piPropInfo) then 
      SetOrdProp(SeuObjeto, piPropInfo, LongInt(ValorDaPropriedade));
end;


Veja se da certo, pois eu lembro de ter feito isso a muito tempo e foi pra jogos. So não lembro se ainda funfa. rsrs

Abraço.
Responder

Gostei + 0

17/10/2013

Marcos Oliveira

Valeu amigo. Deu certo sim.
Muito obrigado.

Att,

Marcos

Tópico Resolvido.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar