Verificar tipo de variaveis
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
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
Curtidas 0
Respostas
Tiago Soares
21/05/2013
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;
GOSTEI 0
Marcos Stiborski
21/05/2013
mas não tem TTime nos varType..
como vou verificar se é TDateTime ou TTime?
como vou verificar se é TDateTime ou TTime?
GOSTEI 0
Tiago Soares
21/05/2013
mas não tem TTime nos varType..
como vou verificar se é TDateTime ou TTime?
como vou verificar se é TDateTime ou TTime?
Fiz o teste com TTime ele entende como Double
GOSTEI 0
Alex Constâncio
21/05/2013
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
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
GOSTEI 0
Marcos Stiborski
21/05/2013
mas não tem TTime nos varType..
como vou verificar se é TDateTime ou TTime?
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
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.
GOSTEI 0