Nesse vídeo demonstraremos a utilização das funções TCGenQry e TCGenQry2, que servem para preparar a execução de uma query.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function zExe474
Prepara a execução de uma query
@type Function
@author Atilio
@since 03/04/2023
@see https://tdn.totvs.com/display/tec/TCGenQry e https://tdn.totvs.com/display/tec/TCGenQry2
@obs
TCGenQry
Parâmetros
+ xPar1 , Indefinido , Compatibilidade
+ xPar2 , Indefinido , Compatibilidade
+ cQuery , Caractere , Query que será aberta
Retorno
+ cRet , Caractere , Retorna uma string vazia
TCGenQry2
Parâmetros
+ xPar1 , Indefinido , Compatibilidade
+ xPar2 , Indefinido , Compatibilidade
+ cQuery , Caractere , Query que será aberta
+ aValues , Array , Array com os conteúdos que serão inseridos no lugar das interrogações dentro da query
Retorno
+ cRet , Caractere , Retorna uma string vazia
**** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/
User Function zExe474()
Local aArea := FWGetArea()
Local cQrySBM := ""
Local aParSubst := {}
//Monta uma query para buscar um grupo de produto com o código 0002
cQrySBM := " SELECT " + CRLF
cQrySBM += " BM_GRUPO, BM_DESC " + CRLF
cQrySBM += " FROM " + CRLF
cQrySBM += " " + RetSQLName("SBM") + " SBM " + CRLF
cQrySBM += " WHERE " + CRLF
cQrySBM += " BM_FILIAL = '" + FWxFilial("SBM") + "' " + CRLF
cQrySBM += " AND BM_GRUPO = '0002' " + CRLF
cQrySBM += " AND SBM.D_E_L_E_T_ = ' ' " + CRLF
//Abre um novo alias conforme a query passada
DbUseArea(.T., "TOPCONN", TCGenQry( , , cQrySBM), "QRY_TST", .F., .T.)
//Caso haja dados, exibe uma mensagem
If ! QRY_TST->(EoF())
FWAlertInfo("Descrição do grupo: " + QRY_TST->BM_DESC, "Teste TCGenQry")
EndIf
QRY_TST->(DbCloseArea())
//Monta uma query para buscar um grupo de produto com o código que será substituido
cQrySBM := " SELECT " + CRLF
cQrySBM += " BM_GRUPO, BM_DESC " + CRLF
cQrySBM += " FROM " + CRLF
cQrySBM += " " + RetSQLName("SBM") + " SBM " + CRLF
cQrySBM += " WHERE " + CRLF
cQrySBM += " BM_FILIAL = '" + FWxFilial("SBM") + "' " + CRLF
cQrySBM += " AND BM_GRUPO = ? " + CRLF
cQrySBM += " AND SBM.D_E_L_E_T_ = ' ' " + CRLF
//Adiciona os dados que irão substituir as interrogações
aAdd(aParSubst, "G001")
//Abre um novo alias conforme a query passada
DbUseArea(.T., "TOPCONN", TCGenQry2( , , cQrySBM, aParSubst), "QRY_TST", .F., .T.)
//Caso haja dados, exibe uma mensagem
If ! QRY_TST->(EoF())
FWAlertInfo("Descrição do grupo: " + QRY_TST->BM_DESC, "Teste TCGenQry2")
EndIf
QRY_TST->(DbCloseArea())
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.