No vídeo de hoje, vamos demonstrar uma dica de como identificar um erro em uma query usando PLSQuery.
A dúvida de hoje, nos perguntaram, que mesmo executando uma query no PLSQuery o resultado às vezes é incorreto, e como poderíamos validar e identificar isso.
Pensando nisso, montamos um exemplo, onde vamos demonstrar em como usar as funções ChangeQuery e ShowLog para verificar a query real que esta sendo executada.
Segue abaixo o vídeo exemplificando:
E abaixo o código fonte desenvolvido:
//Bibliotecas
#Include "tlpp-core.th"
//Declaração da namespace
Namespace custom.terminal.youtube
#Define CRLF Chr(13) + Chr(10) //Carriage Return Line Feed
/*/{Protheus.doc} User Function video0159
Exemplo de teste de query com PLSQuery
@type Function
@author Atilio
@since 05/06/2024
@example custom.terminal.youtube.u_video0159()
/*/
User Function video0159()
Local aArea := FWGetArea() As Array
Local aParameters := {} As Array
Local cInitID := Space(TamSX3('B1_COD')[1]) As Character
Local cLastID := StrTran(cInitID, " ", "Z") As Character
//Adicionando os parâmetros da tela de perguntas
aAdd(aParameters, {1, "Produto De", cInitID, "", ".T.", "SB1", ".T.", 070, .F.})
aAdd(aParameters, {1, "Produto Até", cLastID, "", ".T.", "SB1", ".T.", 070, .T.})
//Somente se a tela de parâmetros for confirmada, que será aberto a tela
If ParamBox(aParameters, "Informe os parâmetros", /*aRet*/, /*bOk*/, /*aButtons*/, /*lCentered*/, /*nPosx*/, /*nPosy*/, /*oDlgWizard*/, /*cLoad*/, .F., .F.)
runQuery()
EndIf
FWRestArea(aArea)
Return
Static Function runQuery()
Local aArea := FWGetArea() As Array
Local cQuery := "" As Character
Local cMessage := "" As Character
//Monta a Query de Produtos
cQuery += " SELECT " + CRLF
cQuery += " B1_COD, " + CRLF
cQuery += " B1_DESC " + CRLF
cQuery += " FROM " + CRLF
cQuery += " " + RetSQLName("SB1") + " SB1 " + CRLF
cQuery += " WHERE " + CRLF
cQuery += " B1_FILIAL = '' " + CRLF
cQuery += " AND SB1.D_E_L_E_T_ = ' ' " + CRLF
cQuery += " --Abaixo os parâmetros informados pelo usuário " + CRLF
cQuery += " AND B1_COD >= '" + MV_PAR01 + "' " + CRLF
cQuery += " AND B1_COD <= '" + MV_PAR02 + "' " + CRLF
//ShowLog(ChangeQuery(cQuery))
PlsQuery(cQuery, "QRY_PROD")
//Se houver dados
If ! QRY_PROD->(EoF())
cMessage := "Abaixo os produtos encontrados: " + CRLF + CRLF
//Percorre os dados
While ! QRY_PROD->(EoF())
//Incrementa a mensagem de log
cMessage += QRY_PROD->B1_COD + "|" + Alltrim(QRY_PROD->B1_DESC) + CRLF
QRY_PROD->(DbSkip())
EndDo
Else
cMessage := "Não há dados na Query"
EndIf
QRY_PROD->(DbCloseArea())
//Mostra o log no fim do processamento
ShowLog(cMessage)
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.