Mesma consulta em várias bases do mesmo banco

(Bill2011) #1

Olá, primeiro post aqui no forum do ScriptCase.

Adquirimos recentemente uma licensa em nossa empresa e precisamos urgentemente resolver uma questão, aí vai o roteiro do problema:

“Somos o Instituto Federal de São Paulo e possuímos vários campi espalhados pelo estado. Cada campus possui uma base de dados própria com a mesma estrutura. Necessitamos criar uma Consulta que mostre os mesmos dados nas diferentes bases de dados. O IBM DB2, banco que utilizamos, possui várias conexões configuradas no ScriptCase e pensamos em criar um Controle com um campo Select que permite a seleção da base a ser visualizada. Aí que surge o problema: Como alterar a conexão da consulta assim que a base é escolhida pelo usuário? Já tive a idéia de alterar o nome da conexão utilizada durante o carregamento da consulta, porém este método não está funcionando.”

Alguém poderia nos ajudar?

(wanderlanlima) #2

Se todas as bases tem a mesma estrutura…
Vc poderia term um cadastro com os dados dos servidores, para criar a conexão em tempo de execução, tipo:

Um campo select para vc escolher com qual servidor quer se conectar e gerar suas consultas.
De acordo com o que vc escolher no evento onchange desse campo, refazer a conexão em tempo de execução.
Existe essa macro para facilitar:

sc_change_connection"conexao_antiga", “conexao_nova”

sc_change_connection

Troca dinamicamente as conexões das aplicações

Para trocar as conexões:

sc_change_connection(“con_ant1”, “con_nova1” ; “con_ant2”, “con_nov2”…);

Pode mudar várias no mesmo comando, usando o separador “;”

Pode usar variáveis:

sc_change_connection({senha}, [xteste] ; “minha_con”, [glo_con]);
sc_change_connection([glox], [xteste]);

Pode trocar, também, a conexão principal.
As trocas só têm efeito nas aplicações seguintes.

Para apagar as trocas feitas:

sc_reset_change_connection();

(Haroldo) #3

Crie uma tabela temporária, através de sc_select ou sc_lookup varra os bancos e alimente essa tabela e execute a consulta em cima dela.

(Bill2011) #4

Obrigado pelas dicas pessoal. Mas eu encontrei uma outra maneira mais produtiva e consegui alterar a conexão ao chamar a aplicação.

Vou colocar a solução que encontrei e se possível, eu ou os moderadores, alterar o título do tópico para resolvido.

Utilizando uma aplicação Controle, acrescentei um select com lookup de edição manual onde contém o nome das conexões e um select especial chamado Menu Links, que contém os nomes das aplicações que o usuário pretende vizualizar. No evento on ValidateSuccess eu uso a macro sc_set_global e faço o nome da conexão ser guardada numa variável global. E nas aplicações que serão chamadas eu uso o evento onApplicationInit alterando o valor da superglobal $_SESSION[‘scriptcase’][’(nome_da_aplicação)’][‘glo_nm_conexao’] jogando o valor da conexão. Assim, o controle chama a aplicação pelo menu links e a conexão que o usuário selecionou é usada para trazer os dados.

Bem, agradeço novamente e espero que isso possa ajudar mais alguém que precise.