Eu dei uma pesquisada aqui no forum e encontrei algum material mas ainda não é o que eu preciso.
A aplicação que estou migrando foi criada com ferramenta Oracle (Forms) em banco Oracle.
Quando o usuário entra na aplicação, informa o usuário/senha que são usuários do banco de dados. Tem todo o controle de grants feitos pelo próprio Oracle, além de controles de auditoria com base no usuário conectado.
As informações de usuário/senha ficam armazenadas em um usuário onde a aplicação se conecta inicialmente. Depois, o sistema valida se o usuário informou a senha correta e, se estiver ok, faz uma nova conexão com esse usuário Oracle.
Eu poderia definir essas informações de usuário/senha no arquivo de configuração de conexão, só que, isso é dinâmico e eu também tenho mais de 400 usuários que podem se conectar no banco.
Minha pergunta é se teria como fazer um sc_change_conection sem ter essas informações de usuário/senha salvas no arquivo de conexão padrão.
sc_change_connection é para trocar conexão criadas no próprio scriptcase, é necessário preencher todos os parametros de configuração.
Você pode utilizar a macro:
sc_connection_edit
ou
sc_connection_new
Entendi.
Só fiquei com uma dúvida, Pelos meus testes, o simples fato de chamar a sc_connection_new não faz com que a aplicação refaça a conexão.
Pelo menos nos meus testes isso não aconteceu.
Depois de fazer o sc_connection_new eu preciso fazer um sc_change_connection também?
Eu preciso alterar a conexão na mesma aplicação onde estou no momento.
Sim,
Vai precisar utilizar esta macro, pois sc_conection_new só faz criar a conexão durante a sessão, quando fechar a sessão a conexão criada deixa de existir.
Estou retornando nesse assunto porque ainda não consegui fazer funcionar.
Meu banco é oracle.
Eu criei uma biblioteca interna pra fazer a conexão e coloquei o seguinte código:
$arr_conn = array();
$arr_conn[‘drive’] = [sc_glo_db_type];
$arr_conn[‘server’] = $server_ip;
$arr_conn[‘user’] = $ora_user;
$arr_conn[‘password’] = $ora_senha;
$arr_conn[‘persistent’] = “N”;
try {
$nova_conexao = “conn_”.$ora_user;
sc_connection_new($nova_conexao, $arr_conn);
} catch (Exception $e) {
echo ‘Erro ao tentar criar conexão : conn_’.$ora_user, $e->getMessage(), “\n”;
}
try {
sc_change_connection(“conn_oracle”,$nova_conexao);
} catch (Exception $e) {
echo 'Erro ao tentar conectar com usuario : '.$ora_user, $e->getMessage(), “\n”;
}
No meu servidor de testes onde tenho um banco Oracle11g XE rodando em windows, a princípio ele funciona. Cria a conexão e passa a usar essa nova conexão.
No meu ambiente de produção, onde tenho um banco Oracle11g Standard rodando em Linux, ele não está funcionando.
Ele não dá erro no sc_connection_new nem no sc_change_connection. Pelo menos não sai no tratamento do try.
Mas quando o programa vai rodar, ele dá o seguinte erro:
“Conexão com o banco de dados não encontrada, contacte o administrador do sistema. Conexão conn_U1909007”.
Eu pensei que poderia ser falta de permissão no arquivo “prod.config.php” onde ficam armazenadas as informações de conexão. Alterei para 777 (rwxrwxrwx) mas também não resolveu.
Outra coisa que eu vi é que o scriptcase não tem uma variável para armazenar o nome da conexão relacionada ao TNSNAMES do Oracle.
Alguém já fiz isso funcionar com Oracle? Será que tem algo mais a configurar no ambiente?
Abandonei a tentativa de criar uma nova conexão via sc_connection_new.
Por algum motivo não está funcionando na versão 8 do scriptcase rodando em Oracle.
Ao invés disso usei a macro sc_connection_edit passando apenas os parâmetros “user” e “password”.
Fazendo dessa forma funcionou.