Árvore de páginas

O DBAccess permite, através da função TCSrvMap do AdvPL, especificar uma lista de campos de um alias aberto de uma tabela* da RDD TOPCONN, para que, a cada registro solicitado ao Banco de Dados pelo DBACCESS, apenas algumas colunas de cada registro sejam recuperadas, ao invés de recuperar todas as colunas. Esse recuro foi chamado de "MAPPER", ou mapeamento dinâmico de campos. 

Por exemplo, veja o programa abaixo:

USE TRB001 ALIAS TRB SHARED NEW VIA "TOPCONN"
DbSetIndex("TRB001A")
DbSetOrder(1)
DbGoTop()
While !EOF()
   conout("Lendo campos : " + TRB->COD + "|" + TRB->NOME )
   DbSkip()
Enddo
Return

No caso, a tabela TRB001 possui por exemplo, 120 colunas. Ao executar esse código, cada DBSKIP() feito pela aplicação vai fazer o DBACcess usar uma Query que recupera todas as colunas de dados da tabela, mesmo que a aplicação dentro desse loop apenas vá utilizar as colunas COD e NOME. 

Agora, se antes de iniciar esse loop, usamos a função TCSRVMAP(), e informamos para ela apenas os dois campos que serão utilizados dentro desse loop, as queries sumbetidas pelo DBACcess para recuperar o conteúdo do registro atua vão apenas trazer os campos COD e NOME da tabela, e o campo de controle interno D_E_L_E_T_ . Vejamos no exemplo abaixo : 

USE TRB001 ALIAS TRB SHARED NEW VIA "TOPCONN"
DbSetIndex("TRB001A")
DbSetOrder(1)
DbGoTop()
TCSRVMAP("TRB","COD,NOME")
While !EOF()
   conout("Lendo campos : " + TRB->COD + "|" + TRB->NOME )
   DbSkip()
Enddo
Return

Ao utilizar a instrução TCSRVMAP(), informando apenas os campos COD e NOME, cada DBSKIP() feito para esta tabela vai buscar no banco de dados apenas os conteúdos das colunas COD e NOME, que estão "mapeadas".

Obsevação sobre Mapeamento dinâmico

Caso o programa consulte no alias em questão uma coluna que faça parte da estrutura mas não está "mapeada" no momento, o Application Server solicita internamente e automaticamente ao DBAccess para acrescentar a coluna solicitada no MAPPER, e o DBAccess por sua vez recupera os dados do registro atualmente posicionado. 

Quando utilizado o recurso de mapeamento, ele pode ser ligado apenas para um campo da tabela, e durante a utilização dela pelo programa, caso novos campos sejam necessários, eles serão adicionados automaticamente. Porém, cada adição interna e dinâmica de campo gera uma nova requisição ao DBACCESS, que lê novamente o registro posicionado acrescentando a coluna necessária. E, quando acrescentado um novo registro na tabela pelo processo atual, o MAPPER é desligado automaticamente. 

A parametização inserida a partir da build 19.3.1.9 do APPSSERVER ( MAPPER=OFF  / DBMAPPER=OFF ) permite desligar o mapeamento no AppServer, de modo que as chamadas para a função TCSRVMAP() passam a ser ignoradas. Com isso, requisições que habilitem o mapeamento dinâmico apenas para um campo, e geram fatalmente vários I/O subsequentes para acrescentar as demais colunas não são mais realizados – pois todas as colunas já estão sendo recuperadas a cada requisição. 









  • Sem rótulos