Apertura, navegación y cierre de tablas DBF/TopConn
Organiza ciclo de vida de áreas propias en DBF y consultas TopConn.
Descripción general
Preparar entorno de pruebas y definir responsabilidad por cada alias. Para DBF, indicar archivo autorizado del servidor y RDD compatible, abrir área nueva solo lectura, posicionar DbGoTop, recorrer mientras !Eof y cerrar solo alias creado. Para SQL por TopConn, DBUseArea recibe TCGenQry como origen y requiere conexión disponible. Recorrer hacia adelante sin suponer soporte de DbGoTop ni DbSkip negativo. El ejemplo cuenta clientes activos del alcance devuelto por xFilial sin exponer registros individuales; SQL explícita no hereda automáticamente todas las reglas de acceso. Verificar alcance y permisos. (Refs. 1–3) xFilial respeta uso compartido SX2: el alcance puede abarcar varias sucursales. RetSqlName resuelve nombre físico; ChangeQuery adapta SQL y TCSetField define tipo numérico QTDE. Requiere área original válida para GetArea/RestArea. (Refs. 4–5)
Ejemplo comentado
#Include "Protheus.ch"
#Include "TopConn.ch"
User Function EdConsulta()
Local aArea := GetArea()
Local cAlias := GetNextAlias()
Local cSucursal := StrTran(xFilial("SA1"), "'", "''")
Local cSql := "SELECT COUNT(*) AS QTDE FROM " + RetSqlName("SA1") + ;
" WHERE D_E_L_E_T_ = ' ' AND A1_FILIAL = '" + cSucursal + "'"
// Entorno Protheus conectado; SELECT limitado a conteo.
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 NilPropuesta: conteo, cierre del cursor propio y restauración del área original en flujo normal. Para DBF aplicar secuencia descrita a copia de prueba. Fallos de conexión y limpieza excepcional requieren tratamiento del proyecto. En revisión: ejemplo editorial no compilado ni ejecutado en Protheus. Comprobar includes, release, RDD y contexto antes de probar.
- Verificación: probar tabla vacía, permiso denegado, alias ocupado y error SQL; comprobar limpieza y restauración en todos los caminos. No usar DbCloseAll ni transacciones de escritura para demostrar lectura.
- En revisión: ejemplo editorial no compilado ni ejecutado en Protheus. Comprobar includes, release, RDD y contexto antes de probar.

Comentarios
Todavía no hay comentarios aprobados.
Inicia sesión con Google o Microsoft para comentar.