terça-feira, 10 de julho de 2012

Alterando a propriedade SQLConnection no delphi em tempo de execução

Recentemente, tive uma necessidade de alterar a SQLConnection do banco de dados SQLServer em tempo de execução , em um sistema em delphi.
A necessidade era em um determinado momento consultar dados de um banco de dados em um outro servidor, e importar dados para a conexão atual. Em primeiro momento, pensei que seria simples, só trocar o valor;
  • SQLConnection.params.values['Database'] := 'bancox';
  • SQLConnection.params.values['HostName'] := 'Servidor1';
mas, não foi tão simples assim...

depois de algum tempo , cheguei na seguinte solução:

Criei um novo componente NovoSQLConnection, e instancio juntamente com meu SQLConnection.

Criei uma procedure passando por parametro um TComponet , que retorna um objeto TSQLConnection; com o objetivo de , dentro da procedure e percorrer todos os componentes do objeto passado, trocando a sqlconnection para a nova conexão.

Ex: para um DataModule ( DmImportacao ) , tenho query's responsaveis pela importação de dados que pretendo realizar.
a função ficou :

procedure AlterarSqlConnection(Componente:TComponent);
var
  i:integer;
begin
  { percorrer todos os componente , e alterar somente os do tipo TSQLQuery }
  for i:= 0 to Componente.ComponentCount -1 do
    begin
      if (Componente.Components[i] is TSQLQuery) then
        TSQLQuery(Componente.Components[i]).SQLConnection :=NovoSQLConnection;
    end;

  end;
end;

Com a função acima, consegui alterar a SQLConnection, no momento que preciso buscar dados de outra conexão. assim é possivel alternar a conexão , sem fechar o sistema.

Nenhum comentário:

Postar um comentário