Usina BRGuía AdvPL
Ingresar
← Todos los temas
FUNCIóNPublicado

DbSelectArea

DbSelectArea( <nArea> | <cAlias> ) --> Nil

Selecciona el área de trabajo activa por número o por un alias ya abierto.

Base de datosAliasWorkareaÁrea actual
01 · DESCRIPCIÓN GENERAL

Descripción general

DbSelectArea() convierte un área de trabajo abierta en el área actual del proceso. No abre una tabla por sí sola: la apertura real se realiza con DbUseArea(), con rutinas de apertura de Protheus o con mecanismos bajo demanda del entorno. Después de la selección, las operaciones de base de datos sin alias explícito actúan sobre el área elegida.

02 · SINTAXIS

Sintaxis

DbSelectArea( <nArea> | <cAlias> ) --> Nil
03 · EJEMPLO PRÁCTICO

Selección de un área ya abierta

User Function ExDbSelectArea()
    DbSelectArea("SA1")
    DbSetOrder(1)
    DbGoTop()

    ConOut(SA1->A1_NOME)
Return
Resultado esperado

SA1 pasa a ser el área de trabajo actual. DbSetOrder() y DbGoTop() actúan sobre SA1 porque no se informó otra área explícitamente.

04 · EJEMPLO PRÁCTICO

Preservar y restaurar el área actual

User Function ExAreaSegura()
    Local nAreaAnterior := Select()

    DbSelectArea("SA2")
    SA2->(DbSetOrder(1))
    SA2->(DbGoTop())
    ConOut(SA2->A2_NOME)

    DbSelectArea(nAreaAnterior)
Return
Resultado esperado

La rutina consulta SA2 y luego restaura el área que estaba activa antes de la ejecución. Select() también preserva el caso en que no había ningún área seleccionada.

05 · EJEMPLO PRÁCTICO

Expresión con alias sin cambiar el área actual

User Function ExAliasado()
    Local cNombreProveedor := ""

    cNombreProveedor := SA2->(A2_NOME)
    SA2->(DbSetOrder(1))
    SA2->(DbGoTop())

    ConOut(cNombreProveedor)
Return
Resultado esperado

La expresión con alias ejecuta la lectura o función en el contexto de SA2 sin dejar SA2 como área actual para el resto del programa.

BUENAS PRÁCTICAS
  • Confirma que el alias ya esté abierto antes de seleccionar el área.
  • Utiliza Select() o GetArea()/RestArea() cuando necesites preservar y restaurar el área original.
  • En rutinas con varias tablas, prefiere expresiones con alias como SA1->(DbGoTop()) para evitar efectos colaterales en el área actual.
  • DbSelectArea(0) selecciona un área libre; es útil antes de abrir un nuevo alias, pero no equivale a abrir automáticamente una tabla.
ERRORES COMUNES
  • DbSelectArea("SA1") no abre la tabla SA1 por sí sola. Si el alias no existe, el comportamiento depende del contexto y puede generar error de alias o activar el tratamiento bajo demanda de Protheus.
  • Guardar solo Alias() puede fallar cuando no hay alias seleccionado; Select() también preserva la situación de área cero.
  • Cambiar el área actual dentro de funciones auxiliares sin restaurarla puede afectar la rutina llamadora.
  • No uses DbSelectArea() como sustituto de DbUseArea() cuando el objetivo sea abrir físicamente una tabla.

Contenido relacionado

REFERENCIAS
  1. BlackTDN. Protheus :: Advpl :: Mito sobre dbSelectArea. Publicado el 20 nov. 2011.
  2. Tudo em AdvPL. Acceso a datos – ALIAS y WORKAREA en AdvPL. Publicado el 25 oct. 2015.
  3. TOTVS. Desenvolvendo queries no Protheus. TDN.
Estado
Publicado
Última revisión el
Idioma original
Portugués
Revisión
Usina.BR
0 comentario(s) aprobado(s)

Comentarios

Todavía no hay comentarios aprobados.

Inicia sesión con Google o Microsoft para comentar.

Desarrollado con Usina Docs · Alpha