Olá Josimar, Já fiz algo parecido, mas sem criar novos componentes. A intenção era fazer os sistemas poderem suportar novos bancos de dados sem intervenções significativas no código.
O que fiz foi deixar de usar componentes específicos de acesso a dados (DBX, ADO etc) na maior parte do programa e utilizar apenas Datasets de memória (TjvMemoryData do Jedi). Os componentes específicos de acesso a dados (1 de conexão e 1 de query) ficam num TDataModule que implementa uma interface (IDatabaseManager) que contem as operações típicas de um database. A interface pode ser vista a seguir: http://pastebin.com/dFFeTsnj (essa URL vai expirar em 1 mês) Numa unit compartilhada por todo o programa, declaro uma variável global do tipo dessa interface: var databaseMgr: IDatabaseManager = nil; Num local apropriado, inicializo a variável com o Datamodule específico para determinado Database. (Este é o único ponto do programa que deve fazer referência ao datamodule específico.) Ex: dmDatabase := TdmDataBaseSqlite.create(nil); dataBaseMgr := dmDataBaseSqlite; Para cada novo banco de dados que for preciso suportar, um novo Datamodule que implemente IDatabaseManager será criado. A seleção do Datamodule que será incluído na compilação pode ser feita com Defines ou criando-se um DPR para cada banco de dados. O uso, por exemplo para popular o MemoryData de um formulário é feito assim: databaseMgr.openDatasetQuery(memoryDataCliente, 'SELECT * FROM Cliente WHERE idCliente='+inttostr(idCliente)); Outros exemplos: databaseMgr.startTransaction; try databaseMgr.ExecSql('update Tabela set campo=campo+1'); databaseMgr.commitTransaction; except databaseMgr.rollbackTransaction; raise; end; {...} barraFerramentas.visible := databaseMgr.getQueryValue('select mostrarBarraFerramentas from Configuracoes')='1'; É preferível não usar dialetos específicos de SQL para facilitar a transição entre bancos de dados. Mas se algo específico é necessário, pode ser colocado em Views ou StoredProcedures. A idéia no meu caso não foi desenvolver uma infraestrutura preparada para qualquer problema futuro, mas criar o mínimo necessário para atingir os objetivos imediatos e evoluir a estrutura conforme a necessidade. Espero ter te ajudado a planejar a sua solução. Um abraço, Dirlei Dionísio Novo artigo: Quando utilizar soluções de contorno http://MaisQueBomCodigo.blogspot.com Em Qua, 2010-06-02 às 09:11 -0300, Josimar Zimermann escreveu: > > Bom dia programadores! > > Aqui na empresa estamos iniciando o desenvolvimento de uma nova > tecnologia interna utilizando os componentes de conexão ZEOS. > > O nosso objetivo é criar uma suíte de componentes baseados no ZEOS > que > carregarão dinamicamente as consultas/comandos SQL de acordo com o > banco > de dados do cliente (ORACLE, MySQL, PostgreSQL). > > Ainda estamos pensando onde vamos armazenar as consultas/comandos SQL > para depois carregá-las dinamicamente. > > A minha questão: alguém tem alguma experiência com esta espécie de > projeto (conexão com diferentes bancos de dados e carregamento > dinâmico > de SQL) ? > O que os senhores sugerem? Tem alguma experiência com esta espécie de > projeto ? > > Qualquer sugestão ou informação será bem-vinda! > > Obrigado! > > Josimar Zimermann