Roteiro NTX pra CDX

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Roteiro NTX pra CDX

Mensagem 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.
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Roteiro NTX pra CDX

Mensagem 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.
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/
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Roteiro NTX pra CDX

Mensagem 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
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Roteiro NTX pra CDX

Mensagem 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.
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/
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Roteiro NTX pra CDX

Mensagem 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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Responder