Array
(
)

Como saber se o Componente Ativo é descendente de BD?

Titanius
   - 04 nov 2005

Olá, gostaria de saber se tem como eu saber se o componente que esta ativo é descendente do TDataSet, acho que é isso mesmo, ou seja, como saber se ele se liga com o banco de dados, pois preciso saber se o campo de origem do campo é do tipo Date ou Time, aí preencher com as datas e horas atuais...

Desde já agradeço.

Fellipe H.


Firekiller
   - 05 nov 2005

Tente assim:

#Código


function IsDataset( Componente:TComponent ):Boolean;
begin
Result:=( Componente is TDataset );
end;



Titanius
   - 06 nov 2005

Opa Firekiller, e como eu jogo o valkor dentro do campo deste jeito?


Bruno Belchior
   - 06 nov 2005

no caso me parece que você deseja saber se ele é descendente de um campo (TField)...#Código

function IsField(Componente: TComponent; Valor: Variant): Boolean; 
begin
Result := (Componente is TField);
if Result then
begin
(Componente as TField).AsVariant := Valor;
end;
end;



Titanius
   - 07 nov 2005

Opa.. é isso mesmo.. obrigado


Titanius
   - 07 nov 2005

Ia me eskecendo... como faco pra saber se o campo eh do tipo Time, Date ou DateTime?


[]s


Bruno Belchior
   - 07 nov 2005

pode usar um or:#Código

Result := (Componente is TDateField) or (Component is TDateTimeField) or (Component is TTimeField);



Titanius
   - 07 nov 2005

Não está funcionando... veja se estou usando corretamente..

#Código


IsField(Screen.ActiveControl, Now)


o Result, sempre retorna False


[]s


Massuda
   - 07 nov 2005

Pelo que entendi, ele quer saber se um controle é data aware.


Titanius
   - 07 nov 2005

Acho que é isso mesmo que dá o nome, queria ver se ele se liga ao banco de dados, e se ligar, se é do tipo [date, time, datetime] e se for, preencher com a data, hora do dia ( now)


[]s


Massuda
   - 07 nov 2005

Acho que não existe modo simples de fazer isso, pois os controles data aware são implementados por agregação e não herança, por isso qualquer teste usando is não funcionará ou será complicado de implementar.

Todo controle data aware é construído agregando a ele um objeto interno derivado da classe TDataLink e/ou TFieldDataLink.

O modo mais fácil de testar se um controle é data aware parece ser testar se o controle possui a propriedade DataSource do tipo TDataSource... tem alguns exemplos aqui no fórum de como fazer isso, por exemplo, [url=http://forum.clubedelphi.net/viewtopic.php?t=56637]este tópico[/url].


Titanius
   - 07 nov 2005

Valeu Massuda, vou olhar lá...