Fórum Verificar tipo de variaveis #443586

21/05/2013

0

Boa tarde a todos..
gostaria de saber se alguém sabe como eu posso verificar se uma variável é do tipo String, Integer, TDateTime, TTime, Double..

o porque disso, é q quero ter uma função que eu passe um parametro, sendo ele String, integer, TDateTime, TTime, Double.., e ele me retorne uma string..

teria como fazer essa verificação?

desde já agradeço
Marcos Stiborski

Marcos Stiborski

Responder

Posts

21/05/2013

Tiago Soares


function Tform3.GetVariantType(const v: variant): string;
begin
case TVarData(v).vType of
varEmpty: result := 'Empty';
varNull: result := 'Null';
varSmallInt: result := 'SmallInt';
varInteger: result := 'Integer';
varSingle: result := 'Single';
varDouble: result := 'Double';
varCurrency: result := 'Currency';
varDate: result := 'Date';
varOleStr: result := 'OleStr';
varDispatch: result := 'Dispatch';
varError: result := 'Error';
varBoolean: result := 'Boolean';
varVariant: result := 'Variant';
varUnknown: result := 'Unknown';
varByte: result := 'Byte';
varString: result := 'String';
varTypeMask: result := 'TypeMask';
varArray: result := 'Array';
varByRef: result := 'ByRef';
end;
end;

procedure TForm3.btn1Click(Sender: TObject);
var
teste : TDateTime;
begin
ShowMessage(GetVariantType(teste));

end;
Responder

Gostei + 0

21/05/2013

Marcos Stiborski

mas não tem TTime nos varType..
como vou verificar se é TDateTime ou TTime?
Responder

Gostei + 0

21/05/2013

Tiago Soares

mas não tem TTime nos varType..
como vou verificar se é TDateTime ou TTime?


Fiz o teste com TTime ele entende como Double
Responder

Gostei + 0

22/05/2013

Alex Constâncio

Olá

No seu lugar eu abordaria o problema de outra forma. Faria uma série de métodos overload, um para cada tipo que precisa de suporte, e em cada um faria uma implementação específica. Desta forma não haveria a necessidade de testes de tipagem, pois o compilador faria a seleção com base no tipo do parâmetro.

Em não sendo possível assim, então eu usaria a mesma estratégia usada pelo método Format, que recebe parâmetros sem tipagem específica e os avalia em tempo de execução. Dê uma olhada no fonte do Format para entender como funciona.

Alex
Responder

Gostei + 0

22/05/2013

Marcos Stiborski

mas não tem TTime nos varType..
como vou verificar se é TDateTime ou TTime?


Fiz o teste com TTime ele entende como Double


o meu problema eh esse, TDateTime e TTime são reconhecidos como double. e eu preciso diferenciar os dois..

Olá

No seu lugar eu abordaria o problema de outra forma. Faria uma série de métodos overload, um para cada tipo que precisa de suporte, e em cada um faria uma implementação específica. Desta forma não haveria a necessidade de testes de tipagem, pois o compilador faria a seleção com base no tipo do parâmetro.

Em não sendo possível assim, então eu usaria a mesma estratégia usada pelo método Format, que recebe parâmetros sem tipagem específica e os avalia em tempo de execução. Dê uma olhada no fonte do Format para entender como funciona.

Alex


Referente aos métodos overload, cai no caso do TDateTime, TTime e Double, o compilador manda sempre para o double.
pois esses tipos são tudo double.

vou dar uma olhada no format e ver se consigo achar uma solução..
muito obrigado.
Responder

Gostei + 0

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

Aceitar