Tempo de leitura: 2 minutos
Olá, no post de hoje iremos falar da função auxiliar GetLastQuery() dentro do desenvolvimento de querys no TOTVS Protheus.
Muitas vezes como forma de facilitar o desenvolvimento de querys no Protheus utilizamos o que chamamos de Embedded SQL, que são querys SQL embutidas no código ADVPL, no entanto quando vamos depurar um código ADVPL que tenha essas características não é possível colocar pontos de paradas entre as instruções BeginSQL e EndSQL, assim não conseguiremos obter a consulta SQL que foi montada dentro desses blocos de instruções.
Para conseguirmos obter a consulta SQL montada utilizamos a função GetLastQuery(), essa função obtém a última consulta SQL montada entre BeginSQL e EndSQL.
Após a abertura do cursor, no alias especificado, a função GetLastQuery() retorna um array, com 5 elementos, onde estão disponíveis as seguintes informações sobre a query executada:
[1] cAlias – Alias usado para abrir o cursor.
[2] cQuery – Query executada.
[3] aCampos – Array de campos com critério de conversão especificados.
[4] lNoParser – Caso verdadeiro (.T.), não foi utilizada a função ChangeQuery() na string original.
[5] nTimeSpend – Tempo, em segundos, utilizado para abertura do cursor.
#include 'protheus.ch'
#include "tbiconn.ch"
/*{Protheus.doc} User Function fGetLQry
(Essa função tem por finalidade mostrar a função GetLastQuery para retornar
a última consulta SQL executada entre BeginSQL e EndSQL)
@type Function
@author Adilio Costa
@since 23/06/2023
@version 12.1.2210
Acesse e se inscreva no Blog/Site ProtheusAdvpl para receber conteúdo:
www.protheusadvpl.com.br
Se inscreva no Canal do ProtheusAdvpl para receber vídeos:
https://wwww.youtube.com/protheusadvpl
Siga-nos no Instagram:
http://https://www.instagram.com/protheusadvpl
Siga a página do ProtheusAdvpl no Facebook:
https://www.facebook.com/protheusadvpl2
Conheça o Portal ProtheusAdvpl:
https://hotmart.com/pt-br/marketplace/produtos/portal-protheusadvpl/O10336806O
*/
//SQL no Protheus - Embedded SQL - fGetLQry
User Function fGetLQry()
Local cAlias := ""
Local cQuery := ""
Local cMsg := ""
//Abro o ambiente
RpcSetType(3)
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "COM"
//Construindo a consulta
BeginSQL Alias "SQL_SB1"
SELECT
B1_COD,
B1_DESC
FROM
%table:SB1% SB1
WHERE
B1_FILIAL = %xFilial:SB1%
AND SB1.%notDel%
EndSQL
//Fecha a consulta com DBCloseArea()
SQL_SB1->(DBCloseArea())
//Obtém as informações da última query executada entre BeginSQL e EndSQL
aDados := GetLastQuery()
cAlias := aDados[1]
cQuery := aDados[2]
//Mostra mensagem com todas as informações capturadas
cMsg += "* cAlias - " + cAlias + Chr(13) + Chr(10)
cMsg += "* cQuery - " + cQuery
MsgInfo(cMg, "Atenção")
Return
Na imagem abaixo podemos ver o retorno da função GetLastQuery() do exemplo do código ADVPL acima:
Bem, finalizamos mais um post aqui no Blog/Site ProtheusAdvpl, espero que você tenha entendido. Qualquer dúvida deixe seu comentário ou nos mande um e-mail para adiliocosta@protheusadvpl.com.br.
Links de referências:
- https://tdn.totvs.com/display/public/framework/Desenvolvendo+queries+no+Protheus
- https://terminaldeinformacao.com/knowledgebase/getlastquery/