Obtendo Informações da Última Query Executada com GetLastQuery em ADVPL

Tempo de leitura: 2 minutos

A função GetLastQuery() em ADVPL a última query executada via BeginSql / EndSqldentro 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] cAliasAlias usado para abrir o cursor.
[2] cQueryQuery executada.
[3] aCamposArray de campos com critério de conversão especificados.
[4] lNoParserCaso verdadeiro (.T.), não foi utilizada a função ChangeQuery() na string original.
[5] nTimeSpendTempo, em segundos, utilizado para abertura do cursor.

 

//Bibliotecas
#Include "Protheus.ch"
#INCLUDE "TBICONN.CH"
#INCLUDE "topconn.ch"
#include "TOTVS.CH"

/*/{Protheus.doc} fGetLQry
Exemplo da função GetLastQuery em ADVPL
@type function
@author Adilio Costa
@since 24/01/2023
@version 1.0
@?Inscreva-se no Blog ProtheusAdvpl:
https://www.protheusadvpl.com.br
@?Inscreva-se no Canal ProtheusAdvpl:
https://www.youtube.com/protheusadvpl
@?Siga-nos no Instagram:
https://www.instagram.com/protheusadvpl
@?Conheça os Cursos e Formações do ProtheusAdvpl:
https://cursos-e-formacoes-protheusadvpl.gr-site.com/

@Participe de nossas comunidades no WhatsApp:
-Comunidade Protheus Backoffice:https://chat.whatsapp.com/KMUIAjwZ6EZ6eAHsLkPTyb
-Comunidade Protheus-RH:https://chat.whatsapp.com/L5dUyAna6xU4ylG5DUgfOW
-Comunidade Protheus-Programação:https://chat.whatsapp.com/LsD6z0apdqKHlOz67bcaEn
-Comunidade Protheus-Framework:https://chat.whatsapp.com/BzUFpjaSnTC3vtsfa77jmG

|Se esse conteúdo foi útil pra você nos ajude divulgando
ele e nossas redes sociais!!|
/*/
//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

	FWAlertInfo(cMg, "Atenção")

Return

Na imagem abaixo podemos ver o retorno da função GetLastQuery() do exemplo do código ADVPL acima:

GetLastQuery

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:

Receba as últimas atualizações do ProtheusAdvpl
Deixe seu melhor email
Nós respeitamos sua privacidade.