Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

silviogs

Abrir ADOquery ou IBquery na mesma procedure

Recommended Posts

Olá ,tenho uma procedure chamada AbrirQuery como segue abaixo:{$IF DEFINED(ADO)}procedure AbrirQuery(Query : TADOQuery; ForceReopen : Boolean);{$ELSEIF DEFINED(IBX)}procedure AbrirQuery(Query : TIBQuery; ForceReopen : Boolean);{$IFEND}begin Query.Active := true; if (Query.State <> dsInactive) and (ForceReopen) then Query.Close; if Query.State = dsInactive then Query.Open;end;chamada: {$IF DEFINED(IBX)} AbrirQuery(IBQrytabela,false); {$IFEND}estou usando diretivas de compilação para diferenciar os dois tipos. Gostaria de saber se existe alguma maneira para que a procedure identifique o tipo do componente a ser utilizado é ADO ou IBX, ou uma maneira que a variável query herdasse o tipo que estou passando. muito grato,Silvio Guedes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colega,

 

Concordo com o Gabriel, pois o Delphi fornece dois operadores (Is e As) que permitem comparações e typecast (typecasting) de objetos por meio da RTTI. Portanto, você pode difundir um objeto de baixo nível para um descendente válido, ou obter uma exceção caso seja inválido.

 

No seu caso especificamente, é necessário adicionar IBQuery, ADODB na sua lista de uses e implementar algo como:

 

Procedure AbreConsulta(Consulta: TObject);begin  if (Consulta is TIBQuery) then    (Consulta as TIBQuery).open  else  if (Consulta is TADOQuery) then    (Consulta as TADOQuery).open;end;

A propósito, as diretivas de compilação são resolvidas durante a compilação e não em tempo de execução. Outra alternativa, seria criar duas funções com o mesmo nome e utiliza Overloading (sobrecarga) de função. Basta adicionar a diretiva overload após a declaração da mesma. Veja mais detalhes no help.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tambem pode passar um TDataSet ao invés de ADO ou IBX; os métodos que você utiliza no exemplo derivam dele e os específicos de cada um, você faz um Cast.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.