DbSelectArea
DbSelectArea( <nArea> | <cAlias> ) --> NilSeleciona a workarea ativa por número ou alias já aberto.
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.
Sintaxe
DbSelectArea( <nArea> | <cAlias> ) --> NilSelecionando uma área já aberta
User Function ExDbSelectArea()
DbSelectArea("SA1")
DbSetOrder(1)
DbGoTop()
ConOut(SA1->A1_NOME)
ReturnSA1 passa a ser a área de trabalho corrente. DbSetOrder() e DbGoTop() atuam sobre SA1 porque nenhuma outra área foi informada explicitamente.
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)
ReturnA 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.
Expressão aliasada sem trocar a área corrente
User Function ExAliasado()
Local cNomeFornecedor := ""
cNomeFornecedor := SA2->(A2_NOME)
SA2->(DbSetOrder(1))
SA2->(DbGoTop())
ConOut(cNomeFornecedor)
ReturnA 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.
- 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.
- 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.

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