Página 1 de 1

Arquivos de Índice

Enviado: 25 Fev 2017 17:34
por ClickOk
Oi amigos

Eu aqui de novo com dúvidas de índices.

Olha, no Advantage Data Architect, Dá pra criar índices e arquivos de índices na mão. O sistema atual tem um arquivo de índice (que é o mesmo nome do dbf)

Como estava criando um índice novo para o sistema, eu criei um arquivo de índice separado, e nesse arquivo de índice adicionei o índice. Então, na hora de usar (apenas 1 pesquisa no sistema), simplesmente usei dbsetindex(novoArquivoDeIndice). Que sonho! funcionou!

Mas depois lembrei que precisa que o índice esteja aberto quando forem feitas atualizações, etc... senão o índice fica desatualizado...
:(

Como prefiro evitar mexer no restante do sistema, então penso na possibilidade de ao inves de criar o arquivo de indice separado do padrao, apenas adicionar o indice ao arquivo existente. Minhas perguntas:
  • (1) Quando atualiza os registros do dbf, todos os índices no cdx são atualizados ou apenas o ativo? Se sim, quer dizer que meu índice novo vai ser atualizado também?
  • (2) Isso de colocar todos os indices no mesmo arquivo é uma boa prática?
  • (3) Como seleciono o indice certo dentre esses no cdx? dbsetindex() é pra escolher o arquivo de indice, não é? não o índice dentro do arquivo. estou confuso sobre dbSetOrder() ou OrdSetFocus(). Não me parecem muito intuitivos esses nomes, a menos que eles chamem cada indice no arquivo de indices de "ordem"
Agradeço atencipadamente!

Arquivos de Índice

Enviado: 26 Fev 2017 18:05
por JoséQuintas
Ao criar o índice CDX, você indica a TAG, que será o nome interno associado ao índice.
Pode selecionar o índice ativo por OrdSetFocus()., acho que isso é o ideal.

Código: Selecionar todos

USE CLIENTES
INDEX ON CODIGO TAG CODIGO
INDEX ON NOME TAG NOME
INDEX ON ENDERECO TAG ENDERECO
OrdSetFocus( "codigo" )
SEEK 5
OrdSetFocus( "NOME" )
SEEK "nome"
OrdeSetFocus( "ENDERECO" )
SEEK "endereco"
Se criar mais índices, neste caso tanto faz, vai ser usado o nome da TAG.
Vai poder adicionar índices sem precisar mexer nos fontes, até mesmo alterar a ordem.

Se usar por número... nunca vai poder mexer na ordem deles, não vai saber qual é realmente o índice selecionado, justamente por número não é intuitivo.

Todos os índices sempre são abertos, atualizados, e contam como um único arquivo aberto.

Detalhe:
Criar uma tag não apaga nem mesmo a tag com mesmo nome existente. Apenas a anterior vai virar lixo.
No caso de recriar índices, o ideal é apagar primeiro.

Isso de usar vários índices em um único arquivo é quase tão velho quanto Clipper, dBase e Foxbase.

Inclusive no ADS acaba perdendo recursos ao usar NTX.

Arquivos de Índice

Enviado: 27 Fev 2017 14:57
por ClickOk
Obrigado. Tirou dúvidas e resolveu problemas. :)