Abertura, navegação e fechamento de tabelas DBF/TopConn
Organiza o ciclo de vida de áreas próprias em DBF e consultas TopConn.
Visão geral
Prepare um ambiente de homologação e defina quem é responsável por cada alias. Para DBF, informe arquivo autorizado no servidor e RDD compatível, abra em área nova e somente leitura, posicione com DbGoTop, percorra enquanto !Eof e feche apenas o alias criado. Para SQL via TopConn, DBUseArea recebe TCGenQry no argumento de origem; a conexão deve estar disponível. Percorra o resultado para frente sem presumir suporte a DbGoTop ou DbSkip negativo. O exemplo abaixo conta clientes ativos do escopo retornado por xFilial sem expor cadastros individuais; a SQL explícita não recebe automaticamente todas as regras de acesso do framework. Confira escopo e permissões antes de executar. (Refs. 1–3) xFilial respeita o compartilhamento SX2: em tabelas compartilhadas, o escopo pode reunir várias filiais. RetSqlName resolve o nome físico; ChangeQuery adapta a SQL e TCSetField define o tipo numérico de QTDE. Pressupõe área original válida para GetArea/RestArea. (Refs. 4–5)
Exemplo comentado
#Include "Protheus.ch"
#Include "TopConn.ch"
User Function EdConsulta()
Local aArea := GetArea()
Local cAlias := GetNextAlias()
Local cFilial := StrTran(xFilial("SA1"), "'", "''")
Local cSql := "SELECT COUNT(*) AS QTDE FROM " + RetSqlName("SA1") + ;
" WHERE D_E_L_E_T_ = ' ' AND A1_FILIAL = '" + cFilial + "'"
// Ambiente Protheus conectado; SELECT limitado a contagem.
cSql := ChangeQuery(cSql)
DBUseArea(.T., "TOPCONN", TCGenQry(Nil, Nil, cSql), cAlias, .T., .T.)
TCSetField(cAlias, "QTDE", "N", 18, 0)
While !(cAlias)->(Eof())
ConOut(cValToChar((cAlias)->QTDE))
(cAlias)->(DbSkip())
EndDo
(cAlias)->(DbCloseArea())
RestArea(aArea)
Return NilProposta: uma contagem, fechamento do cursor criado e restauração da área original no fluxo normal. Para DBF, aplicar a sequência descrita a uma cópia de teste. Erros de conexão e limpeza excepcional exigem tratamento no projeto. Em revisão: exemplo editorial não compilado nem executado em Protheus. Conferir includes, release, RDD e contexto antes de homologar.
- Verificação: testar tabela vazia, ausência de permissão, alias já usado e erro de consulta; conferir fechamento e restauração em todos os caminhos. Não usar DbCloseAll nem transações de gravação para uma demonstração de leitura.
- Em revisão: exemplo editorial não compilado nem executado em Protheus. Conferir includes, release, RDD e contexto antes de homologar.

Comentários
Ainda não há comentários aprovados.
Entre com Google ou Microsoft para comentar.