Usina BRAdvPL Guia
Entrar
← Todos os tópicos
FUNçãOPublicado

DbSelectArea

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

Seleciona a workarea ativa por número ou alias já aberto.

Banco de dadosAliasWorkareaÁrea de trabalho
01 · VISÃO GERAL

Visão geral

DbSelectArea() torna uma área de trabalho aberta a área corrente do processo. Ela não abre tabela: a abertura real é feita por DbUseArea(), por rotinas de abertura do Protheus ou por mecanismos sob demanda do ambiente. Depois da seleção, operações sem alias explícito passam a atuar sobre a área escolhida.

02 · SINTAXE

Sintaxe

DbSelectArea( <nArea> | <cAlias> ) --> Nil
03 · EXEMPLO PRÁTICO

Selecionando uma área já aberta

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

    ConOut(SA1->A1_NOME)
Return
Resultado esperado

SA1 passa a ser a área de trabalho corrente. DbSetOrder() e DbGoTop() atuam sobre SA1 porque nenhuma outra área foi informada explicitamente.

04 · EXEMPLO PRÁTICO

Preservando e restaurando a área corrente

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

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

    DbSelectArea(nAreaAnterior)
Return
Resultado esperado

A rotina consulta SA2 e, ao final, restaura a área que estava ativa antes da execução. Usar Select() preserva corretamente até o caso em que nenhuma área estava selecionada.

05 · EXEMPLO PRÁTICO

Expressão aliasada sem trocar a área corrente

User Function ExAliasado()
    Local cNomeFornecedor := ""

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

    ConOut(cNomeFornecedor)
Return
Resultado esperado

A expressão aliasada executa a leitura ou a função no contexto de SA2 sem deixar SA2 como área corrente para o restante do programa.

BOAS PRÁTICAS
  • Confirme que o alias já está aberto antes de selecionar a área.
  • Use Select() ou GetArea()/RestArea() quando precisar preservar e restaurar a área original.
  • Em trechos com várias tabelas, prefira expressão aliasada, como SA1->(DbGoTop()), para evitar efeitos colaterais na área corrente.
  • DbSelectArea(0) seleciona uma área livre; isso é útil para abertura de novo alias, mas não deve ser confundido com abertura automática de tabela.
ARMADILHAS COMUNS
  • DbSelectArea("SA1") não abre a tabela SA1 por si só. Se o alias não existir, o comportamento depende do contexto e pode resultar em erro de alias inexistente ou acionar tratamento sob demanda do Protheus.
  • Salvar apenas Alias() pode falhar quando não há alias selecionado; Select() preserva também a situação de área zero.
  • Trocar a área corrente dentro de funções auxiliares sem restaurá-la pode quebrar a rotina chamadora.
  • Não use DbSelectArea() como substituto para DbUseArea() quando o objetivo for abrir fisicamente uma tabela.

Conteúdos relacionados

REFERÊNCIAS
  1. BlackTDN. Protheus :: Advpl :: Mito sobre a dbSelectArea. Publicado em 20 nov. 2011.
  2. Tudo em AdvPL. Acesso a dados – ALIAS e WORKAREA no AdvPL. Publicado em 25 out. 2015.
  3. TOTVS. Desenvolvendo queries no Protheus. TDN.
Situação
Publicado
Última revisão em
Idioma original
Português
Revisão
Usina.BR
0 comentário(s) aprovado(s)

Comentários

Ainda não há comentários aprovados.

Entre com Google ou Microsoft para comentar.

Powered by Usina Docs · Alpha