Como saber se o Componente Ativo é descendente de BD?

04/11/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.


Titanius

Respostas

05/11/2005

Firekiller

Tente assim:

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



Responder Citar

06/11/2005

Titanius

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


Responder Citar

06/11/2005

Bruno Belchior

no caso me parece que você deseja saber se ele é descendente de um campo (TField)...
function IsField(Componente: TComponent; Valor: Variant): Boolean; 
begin 
  Result := (Componente is TField); 
  if Result then
  begin
    (Componente as TField).AsVariant := Valor;
  end;
end;



Responder Citar

07/11/2005

Titanius

Opa.. é isso mesmo.. obrigado


Responder Citar

07/11/2005

Titanius

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


[]s


Responder Citar

07/11/2005

Bruno Belchior

pode usar um [b:44bcfb2bc4]or[/b:44bcfb2bc4]:
Result := (Componente is TDateField) or (Component is TDateTimeField) or (Component is TTimeField);



Responder Citar

07/11/2005

Titanius

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

IsField(Screen.ActiveControl, Now)


o Result, sempre retorna False


[]s


Responder Citar

07/11/2005

Massuda

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


Responder Citar

07/11/2005

Titanius

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


Responder Citar

07/11/2005

Massuda

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].


Responder Citar

07/11/2005

Titanius

Valeu Massuda, vou olhar lá...


Responder Citar