Árvore de páginas

Permite alternar entre as conexões ativas com o DBAccess.

Sintaxe

TCSetConn( < nHandle > )

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Referência

nHandle

numérico

Indica o número da conexão que deve ser tornar a corrente.

X


Retorno

Nome

Tipo

Descrição

lRet

lógico

Retorna verdadeiro (.T.), se a conexão corrente for trocada com sucesso. Se a conexão informada não existir ou já estiver sido fechada, a conexão atual é mantida e a função retorna falso (.F.).

Observações

  • A troca de uma conexão ativa não fecha a conexão anteriormente em uso.
  • Quando utilizamos mais de uma conexão, devemos trocar as conexões ativas quando necessário e abrir um recurso, tabela, query ou execução de statement, pois estas execuções são sempre realizadas na conexão ativa.
  • O handler indicado em nHandle é obtido no momento que a conexão é criada, quando utilizamos a função TCLink.
  • Esta função é útil quando da necessidade de integração de aplicações, onde o ERP utiliza um SGBD através do DBAccess, e existe a necessidade da aplicação AdvPL conectar com outro banco de dados para ler ou gravar informações. Neste caso, um programa customizado executado a partir do menu do ERP, que já está conectado com o DBAccess apontando para o banco oficial de dados, pode fazer um TCLink() para um outro DBAccess apontando para outro banco, e alternar entre as conexões ativas, abrindo tabelas e queries em uma conexão e gravando informações em tabelas abertas na segunda conexão.
  • Como a troca entre conexões ativas com o DBAccess requer o handler retornado pela TCLink, e o FrameWork do ERP Protheus já estabelece esta conexão, é possível obter o handler da conexão atual já existente no processo através da função de Framework "AdvConnection" (Esta função somente está disponíveis em repositório para ambientes TOP/SGBD).

Exemplos

// Exemplo de função que alterna entre conexão de dados de ERP e conexão adicional
// com outro banco através do DBAccess. Deve ser executada a partir do Menu do ERP.
User Function OtherConn()
  // Recupera handler da conexão atual com o DBAccess
  // Esta conexão foi feita pelo Framework do AdvPL, usando TCLink()
  Local nHndERP := AdvConnection()
  Local cDBOra  := "ORACLE/DB_TESTE"
  Local cSrvOra := "172.16.0.1"
  Local nHndOra := -1
  Local cQuery  := ''
  
  conout( "ERP conectado - Handler = " + str( nHndERP, 4 ) )
  
  // Cria uma conexão com um outro banco, outro DBAcces
  nHndOra := TcLink( cDbOra, cSrvOra, 7890 )
  If nHndOra < 0
    UserException( "Falha ao conectar com " + cDbOra + " em " + cSrvOra )
  Endif
  
  conout( "Oracle conectado - Handler = " + str( nHndOra, 4 ) )
  conout( "Banco = " + TcGetDB() )
  
  // Volta para conexão ERP
  tcSetConn( nHndERP )
  conout( "Banco = " + TcGetDB() )
  
  // Fecha a conexão com o Oracle
  TcUnlink( nHndOra )
  conout( "Oracle desconectado" )
  
  // Mostra a conexão ativa
  conout( "Banco = " + TcGetDB() )
Return

Veja também