Nesse vídeo demonstraremos a montagem e execução de queries utilizando os comandos BeginSQL e EndSQL.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function zExe066
Exemplo de como fazer queries com linguagem nativa em AdvPL
@type Function
@author Atilio
@since 06/12/2022
@see https://tdn.totvs.com/display/public/framework/Embedded+SQL
@obs
**** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/
User Function zExe066()
Local aArea := FWGetArea()
Local cTipos := "PI;PA;"
Local cWhere := "%B1_TIPO IN " + FormatIn(cTipos, ";") + " AND B1_LOCPAD = '01'%"
Local nRegs := 0
//Construindo a consulta
BeginSql Alias "SQL_SB1"
//Definindo campos com tipo específico
COLUMN B1_UCOM AS DATE
//Definindo a query que será executada
SELECT
B1_COD,
B1_DESC,
B1_UCOM
FROM
%table:SB1% SB1
WHERE
B1_FILIAL = %xFilial:SB1%
AND B1_MSBLQL != '1'
AND %Exp:cWhere%
AND SB1.%notDel%
EndSql
//Enquanto houver registros
While ! SQL_SB1->(EoF())
nRegs++
SQL_SB1->(DbSkip())
EndDo
SQL_SB1->(DbCloseArea())
FWAlertInfo("Foram processados " + cValToChar(nRegs) + " produtos.", "Atenção")
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Quando utilizo aspas no nome das tabelas de um banco PostgreSQL o BeginSql as converte para apóstrofo. Sabe como contornar isso?
Bom dia Eduardo, tudo joia?
Eu nunca passei por esse cenário, mas tenta isolar em uma variável com percentuais e depois usar Exp, por exemplo:
Local cTabela := ‘%”sua_tabela”%’
…
//Construindo a consulta
BeginSql Alias “SQL_TST”
//Definindo a query que será executada
SELECT
[… campos …]
FROM
%Exp:cTabela%
WHERE
[… filtros …]
EndSQL
//Exibe a sintaxe da query executada
ShowLog(“Query: ” + GetLastQuery()[2])
…
Um grande abraço.
Passei pelo mesmo problema e consegui resolver utilizando o %temp-table:cSuaTabela%, dentro do BeginSql.
Bom dia Anthony, tudo joia?
Opa, muito obrigado pelo adendo.
Excelente dica.
Tenha uma ótima e abençoada sexta feira.
Um grande abraço.