silviogs 0 Denunciar post Postado Fevereiro 9, 2005 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
InuTaishou 0 Denunciar post Postado Fevereiro 9, 2005 Para poder usar as propriedades específicas de cada tipo? Use um TypeCast: (Query As TAdoQuery) ou (Query As TIbQuery)...[]'s, Compartilhar este post Link para o post Compartilhar em outros sites
Aroldo Zanela 0 Denunciar post Postado Fevereiro 9, 2005 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
kapak 0 Denunciar post Postado Fevereiro 9, 2005 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