Acesso às tabelas via SQL no Advpl

Estou testando o acesso (meramente didático) de tabelas do Protheus via advpl.

Eu não achei uma explicação que me tirasse da dúvida o que realmente representam duas 'entidades' no advpl:

Uma é o 'Alias', que se obtém no advpl via GetNextAlias(); Outra é a Área, tal como em DbSelectArea(...).

O que é Alias e o que é Área?

Olá,

Alias é o apelido que você dá para uma tabela ou query aberta, essa tabela ou query é aberta em uma área.

Podemos dizer que alias é o apelido e área é o lugar.

Por isso você faz um DbSelectArea("SA1"), você está alocando uma área (workarea) para abrir a tabela SA1T10 com o apelido (alias) SA1.

Se uma tabela está aberta, você pode utilizar a função Select que recebe como parâmetro um alias, essa função retornará um número que é correspondente a workarea do alias informado.

O alias é único por thread, você só pode ter um alias SA1 por exemplo, enquanto a workarea também tem seus limites, algo em retorno de 1024 e 2048.

Documentações:
Select - TOTVSTEC - TDN
DBSelectArea - TOTVSTEC - TDN

2 curtidas

Voce pode também utilizar diretamente assim: (se estiver logado no sistema, com ambiente preparado)
SA1->(Dbsetorder(1)) // Indica o indice de busca e automaticamente já pega área
SA1->(Dbseek(xFilial(“SA1”)+“000001”)) // Aqui eu posso buscar um registro no índice 1 da tabela de clientes.

E posso usar o alias e a area

Alert(SA1->A1_NOME)