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.