Página 1 de 1

Duvidas de criação de indices.

Enviado: 03 Nov 2014 11:29
por Ricardo Sales Ribeiro
Bom Dia
Amigos


Uma duvidas, eu criei uma rotina para criar um indice on seria por NroOds, numero de ordem de serviços, e status,
o status eu só poderia mostra os ´P´pendentes, eu ainda tenho status ´F´ finalizada e ´C´ cancelada.


Use OrdOds
Index on NroOds to OrdOdsCD for status = ´P´

Qdo eu utilizar esse arquivo com esse indice, só mai me mostrar naturalmente asd os com estatus ´P´, no arquivo
as com status ´F´ e ´C´, não aparecerem.

Numa consulta, esse arquivo continua pesado ou seja, mesmo sem mostrar as C e as F ?

Meu problema é o seguinte, esse arquivo é para ter uma consulta rápida, já que os com status ´P´ é no maximo 10 itens,
mas tem horas que fica como se fosse processando alguma coisa, como posso deixar esse arquivo sempre leve.

Como posso fazer para na hora da atualização de indices, eu excluir os registros com status ´F´ e ´C´?

Atenciosamente.

Duvidas de criação de indices.

Enviado: 03 Nov 2014 17:03
por Kapiaba
Olá, você usa indice: .CDX ou .NTX?

Abs.

Duvidas de criação de indices.

Enviado: 03 Nov 2014 17:25
por Ricardo Sales Ribeiro
Caro amigo
Boa Tarde

Eu ainda uso Ntx, não aprendi a usar cdx.

Gde abraço

Duvidas de criação de indices.

Enviado: 03 Nov 2014 19:27
por Jairo Maia
Olá Ricardo,

De cara, eu mudaria isso:

Código: Selecionar todos

Use OrdOds
Index on NroOds to OrdOdsCD for status = ´P´
Para isso:

Código: Selecionar todos

Use OrdOds
Index On status="P" To OrdOdsCD
Mas ideal mesmo seria se você postasse sua função para melhor entendimento.

Duvidas de criação de indices.

Enviado: 04 Nov 2014 09:20
por Ricardo Sales Ribeiro
Bom Dia!

Não entendi a sua opção, como a rotina vai saber que estou organizando por NroOds, e com status =´P´

Index on Status=´P´ TO OrdSerCd
Atenciosamente

Duvidas de criação de indices.

Enviado: 04 Nov 2014 11:11
por Kapiaba
Olá, tente assim ou modifique para seu gosto:

Código: Selecionar todos


   ERASE OrdOdsCD.NTX  // Para não acumular lixo no .NTX.

   USE OrdOds EXCLUSIVE

   INDEX ON NroOds TO OrdOdsCD           ;
         FOR ( .NOT. EOF() )       .AND. ;
             OrdOds->STATUS  = "P" .AND. ;  // Somente os pendentes
             OrdOds->STATUS != "F" .AND. ;
             OrdOds->STATUS != "C"

   CLOSE DATABASE

   USE OrdOds

   SET INDEX TO OrdOdsCD

   Browse()  // para ver o que mostrara...


Duvidas de criação de indices.

Enviado: 04 Nov 2014 11:59
por Jairo Maia
Olá Ricardo,

Verdade!

É que tentei fugir da cláusula FOR por achar que poderia ser ela o problema. Mas faltou o detalhe da ordem:

Código: Selecionar todos

Index on STR(NroOds)+Status=´P´ TO OrdSerCd

Duvidas de criação de indices.

Enviado: 04 Nov 2014 13:07
por JoséQuintas
Tenho a impressão de que o índice com FOR não funciona pra atualização no Harbour.
Pra deixar compatível, a sugestão é manter um índice por status + numero, e usar o SET SCOPE se precisar.

Sem scope, a pesquisa ficaria assim:

Código: Selecionar todos

SEEK "P"
cTxt := ""
DO WHILE status == "P" .AND. .NOT. Eof()
     cTxt += Str( arquivo->Numero, 6 ) + ","
     SKIP
ENDDO
Só pra lembrar: é pra manter o índice sempre ativo, se for indexar só na hora de mostrar então melhor trabalhar sem índice.