Você está na página 1de 3

Pgina 1 de 3

10 Indices
Reviso: 13/07/2002

Abrangncia Verso 5.07 Verso 5.08 Verso 6.09 Verso 7.10 Verses Anteriores

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:
cArqNtx := CriaTrab( NIL, .F. ) //Criando Arquivo IndRegua( "SRA", cArqNtx, cIndCond, , cFor, STR0039 )

//Selec.registros..."

Para deletar este ndice de trabalho no final do processamento:

DbSelectArea( SRA ) //Selecionando a area DbSetOrder( 1 ) //Posicionando na ordem de origem fErase( cArqNtx + OrdBagExt() ) //Deletando arquivo de trabalho

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.

http://dem.microsiga.com.br/w_wEx011.apw?Cod=018283

24/8/2004

Pgina 2 de 3

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.

http://dem.microsiga.com.br/w_wEx011.apw?Cod=018283

24/8/2004

Pgina 3 de 3

Grupos Relacionados Principal / Guias de Referncia / Como programar Advpl no ERP

Topo da Pgina

http://dem.microsiga.com.br/w_wEx011.apw?Cod=018283

24/8/2004

Você também pode gostar