Arquivos de Índice

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

ClickOk
Usuário Nível 1
Usuário Nível 1
Mensagens: 13
Registrado em: 12 Jan 2017 21:29
Localização: Brasilia/DF

Arquivos de Índice

Mensagem 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!
Fábio Alves
"O homem lança os dados, mas do SENHOR procede o resultado" Provérbios 16:33 (paráfrase)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Arquivos de Índice

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
ClickOk
Usuário Nível 1
Usuário Nível 1
Mensagens: 13
Registrado em: 12 Jan 2017 21:29
Localização: Brasilia/DF

Arquivos de Índice

Mensagem por ClickOk »

Obrigado. Tirou dúvidas e resolveu problemas. :)
Fábio Alves
"O homem lança os dados, mas do SENHOR procede o resultado" Provérbios 16:33 (paráfrase)
Responder