Como utilizar o TCLink para atualizar dados em outro banco de dados via AdvPL

Hoje vou mostrar um pequeno exemplo de como atualizar (ou até mesmo consultar) dados de uma outra base de dados via TCLink no AdvPL.

Supondo que o ERP Protheus, esteja usando um SQL Server, mas você precisa se conectar a outra base (seja Oracle, SQL Server, etc), como fazer com AdvPL?

Primeiramente é necessário criar a configuração de conexão da base de dados no seu DbAccess (para isso será necessário fazer via DbMonitor), nesse link eu mostro como fazer algo similar – https://terminaldeinformacao.com/2017/12/17/como-instalar-protheus-parte-3-dbaccess-odbc/.

Quando os testes no DbMonitor estiverem ok, agora via AdvPL, é necessário você criar uma conexão via TCLink (guardando o ponteiro deixado por ela). Essa conexão, você passa as instruções configuradas no seu DbAccess.

Com a conexão realizada, ai você consegue executar os comandos direto nessa base. Ai quando você acabar de usar a base, basta você dar um TCUnlink para desconectar.

Abaixo um pequeno exemplo de código em AdvPL que faz o que citamos acima.

Local cBcoDados:= "MSSQL/BANCO_XPTO" //Conexão no DbAccess com a outra base de Dados
Local cServer  := "192.168.xxxxx"	 //Servidor que está configurado o DbAccess
Local nPorta   := 7890		         //Porta da conexão do DbAccess
Local nHandle  := 0                  //Ponteiro que armazenará a conexão

//Conecta com Banco
nHandle  := TcLink(cBcoDados, cServer, nPorta)

//Se houve algum erro na conexão
If nHandle < 0
	MsgInfo("Não foi possível conectar! Erro: " + cValToChar(nHandle), "Atenção")
	
//Senão, insere um registro em uma tabela (você pode fazer outras operações como SELECT, UPDATE, etc)
Else 
	cQuery := " INSERT INTO TABELA_XYZ VALUES ( " 
	cQuery += " null, 1, 'Daniel', 'Teste')  " 
	TcSqlExec(cQuery)
Endif

//Desconecta
TCUnlink(nHandle)

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

6 Responses

  1. George Allan disse:

    Muito legal Atílio! Valeu aí!

  2. Daniel Gonçalves Jr. disse:

    Muito bom, grato pela dica!

  3. Luiz disse:

    Existe a possibilidade de acessar outra base, de outro sistema?

Deixe uma resposta para Dan_AtilioCancelar resposta

Terminal de Informação