Qual a diferença entre Count To e RecCount | Ti Responde 051

No vídeo de hoje vamos exemplificar qual é a diferença entre o comando Count To e a função RecCount.

Hoje a dúvida veio de alguns alunos que perguntaram se havia alguma diferença entre contar registros com Count To e com RecCount.

Então foi demonstrado nesse vídeo quais situações que geram diferenças entre os dois recursos.

E abaixo o código fonte desenvolvido para exemplificar:

//Bibliotecas
#Include "TOTVS.ch"
#Include "TopConn.ch"

/*/{Protheus.doc} User Function zVid0051
Função para comparar o Count To e RecCount
@type  Function
@author Atilio
@since 24/08/2022
/*/

User Function zVid0051()
    Local aArea     := FWGetArea()
    Local cQryAux   := ""
    Local nTotalCou := 0
    Local nTotalRec := 0
    Local nSB1Count := 0
    Local nSB1Recno := 0
    Local cMensagem := ""

    //Busca todos os produtos que não estejam bloqueados
    cQryAux := " SELECT " + CRLF
    cQryAux += "     B1_COD, " + CRLF
    cQryAux += "     B1_DESC, " + CRLF
    cQryAux += "     SB1.R_E_C_N_O_ AS SB1REC " + CRLF
    cQryAux += " FROM " + CRLF
    cQryAux += "     " + RetSQLName("SB1") + " SB1 " + CRLF
    cQryAux += " WHERE " + CRLF
    cQryAux += "     B1_FILIAL = '" + FWxFilial("SB1") + "' " + CRLF
    cQryAux += "     AND B1_MSBLQL != '1' " + CRLF
    cQryAux += "     AND SB1.D_E_L_E_T_ = ' ' " + CRLF
    TCQuery cQryAux New Alias "QRY_AUX"
    DbSelectArea("QRY_AUX")

    //Pega o total via RecCount da Query
    nTotalRec := QRY_AUX->(RecCount())
    QRY_AUX->(DbGoTop())

    //Pega o total via Count To da Query
    Count To nTotalCou
    QRY_AUX->(DbGoTop())
    QRY_AUX->(DbCloseArea())

    //Pega o total via RecCount da SB1
    DbSelectArea("SB1")
    nSB1Recno := SB1->(RecCount())
    SB1->(DbGoTop())

    //Pega o total via Count To da SB1
    Count To nSB1Count
    SB1->(DbGoTop())

    //Monta a mensagem e exibe
    cMensagem += "Query da SB1:" + CRLF
    cMensagem += "Total do <strong>RecCount</strong>: " + cValToChar(nTotalRec) + CRLF
    cMensagem += "Total do <strong>Count To</strong>: " + cValToChar(nTotalCou) + CRLF
    cMensagem += CRLF
    cMensagem += "SB1 padrão:" + CRLF
    cMensagem += "Total do <strong>RecCount</strong>: " + cValToChar(nSB1Recno) + CRLF
    cMensagem += "Total do <strong>Count To</strong>: " + cValToChar(nSB1Count) + CRLF
    MsgInfo(cMensagem, "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.

Deixe uma resposta

Terminal de Informação