Página 1 de 1

Roteiro NTX pra CDX

Enviado: 21 Out 2014 10:14
por JoséQuintas
Aproveitar que acabei de fazer isso com outro aplicativo, pra mostrar que caminho eu segui pra fazer a mudança por etapas.

1. Se possível, alterar rotinas de abrir índices

Aqui eu uso uma AbreArquivos( { "arquivo1", "arquivo2", ... } )
Essa rotina já abre DBF e seus respectivos índices.
No meu caso, tenho uma lista no sistema com DBFs e respectivos arquivos de índices
Pode usar o sistema normalmente durante/depois disso.
Temporários não precisa mexer.
Isto vai facilitar quando mudar pra usar CDX pra valer

2. Esta parte tem que ser de uma vez:
alterar extensão de NTX pra CDX
Vai precisar uma parada no sistema pra reindexar.
Pode usar o sistema normalmente depois disso.
Por enquanto a vantagem vai ser índices menores, e possibilidade de usar chave de indexação maior
Convém desligar a abertura automática de CDX, e fazer somente manual.
Alterar If .NOT. FILE( "arquivo.ntx" ) pra IF .NOT. File( "arquivo.cdx" )

3. Acrescentar tag na indexação

Código: Selecionar todos

INDEX ON codigo TAG ("clientec") TO clientc
Pronto, continua tudo igual, e os índices passaram a ter TAG, que é a referência pra CDX
Nos temporários não é obrigatório isso.
Pode usar o sistema normalmente durante/depois disso.
Assim que puder, parar o sistema e reindexar.


4. Alterar os SET INDEX e/ou SET ORDER usados pra alterar a ordem dos índices

Pra mudar a ordem, ao invés de SET ORDER TO 2, ou SET INDEX TO clientenome
passar a usar OrdSetFocus( "clientenome" )
Pode usar o sistema normalmente durante/depois disso.
Temporários não precisa mexer.
A abertura de índices é sempre de todos, e só usa ordsetfcus() pra ordem.
Se fez a etapa 1, facilita pra não alterar em cada fonte.

Código: Selecionar todos

USE clientes
SET INDEX TO clientecodigo,clientenome
OrdSetFocus( "clientecodigo" )
5. Alterar pra aquivo único.

Precisa alterar a indexação, que não precisa mais nome de arquivo CDX

Código: Selecionar todos

INDEX ON codigo TAG clientecod
INDEX ON nome TAG clientenome
E alterar as aberturas de índice, que se usou a etapa 1 fica mais fácil.

Código: Selecionar todos

USE clientes
SET INDEX TO clientes
OrdSetFocus( "clientecodigo" )
Após esta etapa, parar o sistema pra reindexar.

E é isso.
É bom pra sistemas grandes, pra ir fazendo por etapas.

antes:
clientes.dbf
cliente_codigo.ntx
cliente_nome.ntx
cliente_cnpj.ntx
cliente_endereco.ntx

depois:
clientes.dbf
clientes.cdx

Vantagens:
- Índices menores
- Melhor controle sobre atualização de índices, porque todos estão sempre abertos e sendo atualizados
- Neste exemplo, de 5 arquivos abertos passaram a ser 2, o que reduz o total de arquivos abertos e pode evitar DOS ERROR 4
O limite de índices em um CDX são 50, o que é muito, mas se precisar de mais ainda, só criar mais arquivos CDX.

Roteiro NTX pra CDX

Enviado: 21 Out 2014 10:21
por JoséQuintas
Acha estranho vários índices num único arquivo?

O que dirá do Access então....
Equivale a todos os DBFs e CDX num único arquivo.
Vira tudo um único arquivo MDB.

Roteiro NTX pra CDX

Enviado: 21 Out 2014 13:48
por Jairo Maia
Olá José,

Como sempre muito boas suas dicas.

Você sabia que esse mesmo método pode ser também usado com os NTX bastando usar Tag. E da mesma forma: quando não indica o nome do arquivo índice com TO assume o mesmo nome do Dbf:

NTX sem a cláusula TAG:
clientes.dbf
cliente_codigo.ntx
cliente_nome.ntx
cliente_cnpj.ntx
cliente_endereco.ntx

NTX com a cláusula TAG:
clientes.dbf
clientes.ntx

Roteiro NTX pra CDX

Enviado: 21 Out 2014 13:59
por JoséQuintas
Isso eu não sabia.
Mas provavelmente só seja aceito no Harbour.
Só ajustar o roteiro, conforme os fontes ou o compilador Clipper/Harbour/xHarbour.

Faltou avisar uma coisa importante:
No CDX, ao criar um índice por uma tag, a anterior não se apaga.

Código: Selecionar todos

use clientes
index on codigo TAG codigo
index on codigo TAG codigo
index on codigo TAG codigo
index on codigo TAG codigo
Isso vai causar um índice 4 vezes maior.
O problema vai ser só ocupar mais espaço.
Pra criar um CDX do zero o primeiro passo vai ser apagar caso já exista. Provavelmente o NTX com tag também.

Roteiro NTX pra CDX

Enviado: 22 Out 2014 05:14
por Jairo Maia
JoséQuintas escreveu:Mas provavelmente só seja aceito no Harbour.
Sim. Somente no Harbour. E se não estou enganado, somente a partir da versão 2.1.