Executando queries com os comandos BeginSQL e EndSQL – Maratona AdvPL e TL++ 066

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.

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.

4 Responses

  1. Eduardo disse:

    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.

    • Anthony disse:

      Passei pelo mesmo problema e consegui resolver utilizando o %temp-table:cSuaTabela%, dentro do BeginSql.

Deixe uma resposta

Terminal de Informação