Você está na página 1de 3

10 Indices

Abrangncia

A utilizao de ndices para a pesquisa deve ser bem analisada a fim de evitar lentido ou
processamentos redundantes nos relatrios.

Os ndices ajudam a otimizar as pesquisas e laos de processamentos, por isto no devem ser
subtilizados ou utilizados de forma errnea.

Caso a necessidade do relatrio exija uma otimizao que no possvel obter com os ndices
padres do sistema possvel criar ndices temporrios atravs da funo Indregua tornando
assim os relatrios mais geis e bem estruturados.

Criando e Deletando Arquivos de trabalho (Temporrios)

Quando criamos um arquivo de trabalho ou um ndice de trabalho (utilizando a funo Indregua) no
final do programa devemos apaga-los.

Para criao de um ndice de Trabalho (Temporrio) com Indregua:


cAr qNt x : = Cr i aTr ab( NI L, . F. ) / / Cr i ando Ar qui vo
I ndRegua( " SRA" , cAr qNt x, cI ndCond, , cFor , STR0039 ) / / Sel ec. r egi st r os. . . "



Para deletar este ndice de trabalho no final do processamento:


DbSel ect Ar ea( SRA ) / / Sel eci onando a ar ea
DbSet Or der ( 1 ) / / Posi ci onando na or demde or i gem
f Er ase( cAr qNt x + Or dBagExt ( ) ) / / Del et ando ar qui vo de t r abal ho



Caso o programa que crie um arquivo de trabalho e no o apague no final de seu
processamento, este ficar ocupando espao em disco no ambiente de trabalho. Isto poder
gerar problemas futuros para o cliente. Por isto, fundamental, que aps sua utilizao o
mesmo seja descartado.

Utilizando Querys no Protheus

Podemos utilizar querys no Protheus quando acessamos bancos de dados via TopConnect.

As querys, quando bem construdas, melhoram enormemente a eficincia ( velocidade ) das
consultas aos dados e reduzem a sobrecarga no servidor de aplicao, TopConnect e Banco de
Dados.
Reviso: 13/07/2002
Verso 5.07 Verso 5.08 Verso 6.09 Verso 7.10 Verses Anteriores
Pgina 1de 3
24/8/2004 http://dem.microsiga.com.br/w_wEx011.apw?Cod=018283

Normalmente uma query utilizada em substituio a um Loop ( While ) na base de dados de
programao convencional. Querys mais complexas utilizando joins poder ser construdas com a
mesma funo de vrios loops.

Dicas Importantes - DBF versus SQL

A princpio no existem diferenas na programao para a verso SQL, j que pelo prprio fato de
ser uma linguagem interpretada, o sistema quem se encarrega de executar os comandos e funes
adequadamente no ambiente em que trabalha. Mas importante manter algumas informaes em
mente ao programar para o ambiente SQL.

Deve-se lembrar que estamos trabalhando com um banco de dados relacional, que se utiliza de
tabelas ao invs de arquivos, e onde o sistema no tem acesso aos dados de forma nativa e sim
atravs do Top Connect. Essa forma de acesso adiciona ao sistema algumas das caractersticas e
vantagens oferecidas pelo SGBD em uso (por exemplo, o Oracle, MSSQL Server ou o DB2) como
por exemplo segurana e integridade referencial, e as imensas facilidades da linguagem SQL, mas
por outro lado tem-se tambm as implicaes da converso dos comandos no padro xBase para a
perfeita compreenso no ambiente SQL.

Imagine a montagem de uma expresso de filtro para um ndice condicional. Tome a seguinte
expresso como exemplo: "DTOS(E1_VENCTO) >=DTOS(mv_par01)". Em um ambiente padro
xBase, como o NTX ou o ADS, pode-se utilizar variveis sem qualquer problema em uma expresso
de filtro pois a mesma ser avaliada registro a registro durante a montagem do ndice. Mas no
ambiente SQL, o filtro nada mais do que uma tabela temporria, onde esto selecionados apenas os
registros conforme a condio indicada. A seleo de dados em tabelas pelo SQL mais rpida, mas
em conpensao o SGBD no tem como reconhecer a varivel informada na expresso. Ela existe
apenas no sistema ou, mais especificamente, no seu programa. Por isso, deve-se substituir a
expresso anteriormente exemplificada pela seguinte (que tambm funcionaria perfeitamente em um
ambiente xBase): "DTOS(E1_VENCTO) >="+DTOS(mv_par01)+"". Esta expresso melhor que
anterior simplesmente porque no se utiliza da varivel e sim do contedo da mesma, o que pode ser
compreendido em qualquer ambiente. Toda essas explicaes so vlidas, da mesma maneira, a
filtros criados atravs do comando SET FILTER.

Ainda existem outros detalhes a se considerar quando se trabalha com ndices em um ambiente SQL.
que na verdade no existem ndices condicionais nesse ambiente. O filtro criado independente do
ndice. Ento, voc pode criar um INDREGUA com um filtro e mudar a ordem, mas o filtro
permanecer ativo, em qualquer ordem. Do mesmo modo, no se pode manter dois ndices, com
filtros diferentes, pois um filtro sobrescreveria o outro.

Outro ponto de ateno deve ser a funo xBase chamada DBSETINDEX. Podem ocorrer alguns
erros ao tentar-se utilizar essa funo para abrir um ndice de trabalho criado. Por esses motivos e
pelo fato de tornar o processamento mais lento deve-se evitar ao mximo o uso de ndices de
trabalho no ambiente SQL.

Da mesma maneira que a funco DBSETINDEX, os comandos COPY TO e APPEND FROM
tambm devem ter uma ateno especial. No ambiente SQL esses comandos so executados entre
uma tabela e um arquivo DBF (e vice-versa) ou entre dois arquivos DBF. Por exemplo, o comando
COPY TO pode ser usado para copiar os dados da tabela ativa para um DBF local e o comando
APPEND FROM pode ser usado para importar os dados de um arquivo local para a tabela ativa. Os
dois podem ser usados entre dois arquivos, mas nunca pode-se usar, por exemplo, o comando
APPEND FROM para importar os dados de uma tabela para outra.
Pgina 2de 3
24/8/2004 http://dem.microsiga.com.br/w_wEx011.apw?Cod=018283


Topo da Pgina


Grupos Relacionados
Principal / Guias de Referncia / Como programar Advpl no ERP
Pgina 3de 3
24/8/2004 http://dem.microsiga.com.br/w_wEx011.apw?Cod=018283

Você também pode gostar