criação de indices cdx no xharbour

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

lapinhazzz
Usuário Nível 3
Usuário Nível 3
Mensagens: 130
Registrado em: 20 Abr 2009 10:52
Localização: LAGOA

criação de indices cdx no xharbour

Mensagem por lapinhazzz »

Bom Dia a Todos,

Gostaria que alguém me ajudasse a criar um exemplo de criação de indices cdx no xharbour.

Cumprimentos a todos


Carlos Lapa
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: criação de indices cdx no xharbour

Mensagem por alaminojunior »

Vamos lá meu caro:
Acrescente estas linhas no início do seu programa;

Código: Selecionar todos

      REQUEST DBFCDX
      RDDSETDEFAULT("DBFCDX")
Com isso o seu programa já vai trabalhar por padrão, com índices CDX.
Agora, vamos ao resto:
Não sei se já sabe, mas o RDDCDX trabalha diferente do RDDNTX.
Com NTX você tem uma única ordem em cada arquivo de índice. E com CDX você tem várias ordens no mesmo arquivo físico. Sendo assim, ao invéz daquele banco de dados onde você abria trocentos arquivos de índices, e estourava a capacidade de handles do MS-DOS :-´ , você agora abre apenas um arquivo de índice com todas as ordens dentro dele.

Para criar os índices:

Código: Selecionar todos

use clientes exclusive
index on clicod tag indcli01 to indcli
index on clinom tag indcli02 to indcli
index on clifan tag indcli03 to indcli
index on clicpf tag indcli04 to indcli
index on climrc tag indcli05 to indcli
set index to indcli
Como você pode ver, está tudo dentro do arquivo de índice indcli.cdx
Para alternar por entre as ordens, você faz do mesmo jeito que já trabalha com NTX:

Código: Selecionar todos

Set Order to 1
ou usa o funcional:

Código: Selecionar todos

OrdSetFocus("indcli02")
Um detalhe importante, é você deletar estes arquivos de índice, antes de reindexar.
E você ainda ganha de brinde:
1º A possibilidade de trabalhar com o Set Scope to... no lugar de Set Filter;
2º Trabalhar com ordens condicionais For e While;
3º Este RDD é mais ágil e mais seguro.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: criação de indices cdx no xharbour

Mensagem por rochinha »

Amiguinhos,

Um reforço na dica para não ter problemas futuros.

Não adianta somente modificar a forma de criação dos indices.

Será necessário recriar as estruturas pois por algum motivo estruturas criadas pelo motor de base de dados NTX não é 100% compatível com o motor de dados CDX.

Os arquivos que contém conteúdo MEMO sofrerão alteração também sendo que voce deixará de usar DBT e passará a usar FPT, portanto recrie todas as tabelas e APPENDe os dados das bases NTX antes de indexar.

Código: Selecionar todos

REQUEST DBFCDX
RDDSETDEFAULT("DBFCDX")
...
USE novo 
USE antigo VIA "DBFNTX" 
...
SELECT novo 
APPEND FROM antigo
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Re: criação de indices cdx no xharbour

Mensagem por Hasse »

Boa noite Mestre Rochinha.

De modo algum desejo polemizar a tua afirmação que a estrura dos DBF's usados com o NTX não são compatíveis para usar com CDX, pois você, por algumas vezes, já me tirou do sufoco, e sempre serei grato por isto. Eu somente desejo tirar a limpo a minha dúvida e minha experiência no trato com estes 2 tipos de índices.

Pela minha experiência de migração eu sempre tenho problemas ao voltar do CDX para o NTX, mas nunca tive qualquer problema ao migrar do NTX para o CDX.

Isto acontece sempre que preciso fazer alguma manutenção manual em algum DBF atrelado a índices CDX. Ainda uso o dBase IV, que por facildade de uso quer por preguiça minha de aprender a usar algum outro soft mais moderno. Para aqueles que não sabem, o dBase IV não reconhece índices CDX.

Costumo usar o dBase IV principalmente para fazer a correção de alguma corrupção introduzida por queda de energia durante o processo de gravação de dados no HD, quando acontecem problemas dos mais incríveis.

Pois bem, antes de poder abrir um DBF pelo dBase IV, preciso desatrelá-lo do índice CDX de mesmo nome e autopen ativo. Se eu não fizer isto o dBase IV emite mensagem afirmando que "não se trata de um arquivo DBF válido".

Para isso uso o DBU.EXE. Com o arquivo DBF aberto e índice CDX fechado, faço uma alteração de 1 byte qualquer em algum ponto e em campo chave de índice, e pronto, o DBF está desatrelado do índice CDX. Em seguida posso abrí-lo com o dBase IV sem qualquer problema.

Feita a correção basta reindexar o dito para CDX sem qualquer problema.

Nunca usei campos MEMO e nem pretendo usar, por isso não posso dar minha opinião neste caso.

Nunca precisei recriar estruturas dos arquivos DBF's ao migrar para o CDX.

Eu gostaria de saber quais os problemas concretos que você já enfrentou neste caso, e assim, me preparar para algum eventual problema do tipo.

Um abração Rochinha.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: criação de indices cdx no xharbour

Mensagem por rochinha »

Amiguinho,

Um Salve,

Bem em relação a existência do pequenino problema que encontrei usando a migração, agora não me vem a cabeça e não foi um problema que aconteceu na hora, mas não dei muita importancia pois devia estar com pressa para sanar os problemas.

Como geralmente nossos sistemas vão sofrendo alterações, e estas alterações geralmente necessitam de novos campos, por algumas vezes temos de recriar as estruturas, então nada demais em se recriar as mesmas novamente, mesmo porque, deve existir sim alguma diferença entre os motores.

E porque existe? porque o uso de vários motores nos obrigam a usar a cláusula VIA no momento da abertura dos arquivos.

Talvez( eu não sei ainda, até que faça um teste ) se criarmos uma estrutura usando DBFNTX, preenche-la de dados, criar uma outra estrutura DBFCDX e APPENDar os dados de DBFNTX direramente, tenho a certeza que algo poderá causar algum erro.

Como os erros e corrupções não acontecem no momento que queremos e sim alheio a nossa vontade não posso precisar qual o problema que me ocorreu com precisão.

Então seguindo o bom senso, preferi recriar todas as tabelas e trazer os dados das tabelas antigas usando os motores correspondentes.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: criação de indices cdx no xharbour

Mensagem por lugab »

Aproveitando o tópico, eu tenho uma pergunta pra vcs:

Eu posso utilizar OrdSetFocus("indcli02") nos meus programas clipper compilados em xarbour, para setar o índice mesmo usando DBDFs no padrão NTX ?

É que eu detesto usar SET ORDER TO 1....etc
lugab
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: criação de indices cdx no xharbour

Mensagem por alaminojunior »

Sem problemas. Ordsetfocus é a versão funcional do comando Set Order To ...
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: criação de indices cdx no xharbour

Mensagem por alxsts »

Olá!

Desde o Clipper 5.2 já era possível usar OrdSetFocus( NomeOrdem ), mais apropriada para índices CDX, creio eu, para "navegar" entre as várias ordens (Tags) de um índice estrutural. Mais antiga ainda é a função DbSetOrder( Numero_Ordem ), usada para navegar entre as várias ordens do RDD NTX, abertas pelo SET INDEX TO ou DbSetIndex().
[]´s
Alexandre Santos (AlxSts)
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: criação de indices cdx no xharbour

Mensagem por lugab »

Valeu, pessoal, Cês são "os caras

Gabriel"
lugab
jamazevedo
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 29 Dez 2005 16:50
Localização: Manaus - AM

Re: criação de indices cdx no xharbour

Mensagem por jamazevedo »

Em relação aos campos MEMOs já passei por isso e existem problemas de estrutura quando se muda de NTX para CDX portanto é melhor recriar os DBF's conforme recomenda o Rochinha:

Código: Selecionar todos

REQUEST DBFCDX
RDDSETDEFAULT("DBFCDX")
...
USE novo
USE antigo VIA "DBFNTX"
...
SELECT novo
APPEND FROM antigo
______________________________________________________
Usando: Linux Ubuntu 18.04, Harbour 3.2.0dev r1811161533
______________________________________________________
José Airton de Menezes Azevedo
Manaus - AM
cacg57
Usuário Nível 1
Usuário Nível 1
Mensagens: 17
Registrado em: 28 Nov 2009 13:06
Localização: Florianopolis - SC

Re: criação de indices cdx no xharbour

Mensagem por cacg57 »

Senhores

Estou migrando do clipper 5.2e para xHarbou 1.2 e uso drive CDX, e não tive qualquer problema grave na migração.
Agora, lendo esse tópico recordo de uma situação acontecida.
Uso um software de terceiros feito em Delphi que lê os DBF e CDX do sistema.
Após indexar os DBF pelo xHarbour, o software do Delphi começou apresentar erros ao ler os DBF CDX.

Ao verificar o problema, indexei novamente os arquivos pelo Clipper 5.2e e o erro persistia.
Antes de indexar os arquivos DBF tenho como costume sempre excluir os CDX antes de indexar.

Após ler esse tópico, fiz o seguinte.
1) Criei novamente as estruturas do DBF.
2) Dei um append nos registro dos arquivos velhos para o novo.
3) Indexei pelo Clipper 5.2e

O programa Delphi voltou a ler os DBF CDX.

Notei que quando indexei os arquivos em xHarbour, os CDX ficaram com tamanho menor que os indexados em Clipper.

Estou usando o sistema 100% em xharbour, somente o programa que indexa os arquivos é em clipper.
Gostaria da opinião e orientação dos senhores.
Fiz toda a migração sem drama nenhum, graças a leitura do forum.

Obrigado

Augusto
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: criação de indices cdx no xharbour

Mensagem por sygecom »

Olá Augusto,
Tente colocar no inicio do seu aplicativo a linha abaixo e crie os índice pelo Harbour e tente ver se fica compatível:
SET DBFLOCKSCHEME TO 1
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
cacg57
Usuário Nível 1
Usuário Nível 1
Mensagens: 17
Registrado em: 28 Nov 2009 13:06
Localização: Florianopolis - SC

Re: criação de indices cdx no xharbour

Mensagem por cacg57 »

Leonardo

Coloquei o comando SET DBFLOCKSCHEME TO 1 no inicio do programa e recompilei com o xHarbour.

1) Reindexei (CDX) todos os arquivos novamente em xHarbour.
2) Tentei usar o software desenvolvido em Delphi que utiliza 2 arquivos DBF CDX do sistema.
3) Segui apresentando erro. (não enxerga os registros)
4) Reindexei em clipper 5.2e e o erro persistiu na leitura dos arquivos pelo Delphi.
5) Recriei a estrutura do DBF e após reindexei em clipper 5.2e.

O sistema em xHarbour lê sem problemas os arquivos assim como o Delphi.
Estou usando o sistema 99,99 % em xHarbour e uso a criação dos arquivos em CDX no clipper 5.2e para poder compartilhar com o Delphi.
Estou com um problema na carga dos executáveis em xHarbour, muito lenta, demora até 4 segundos para carregar, em todas os SO.

Desculpe não ter postado a resposta antes, mas só podemos fazer essa experiência no fim de semana.

Obrigado pela atenção

Augusto
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: criação de indices cdx no xharbour

Mensagem por sygecom »

É nesse caso então não sei lhe dizer o por que, pode tentar também com:
SET DBFLOCKSCHEME TO 2
E sobre ficar lento, tive problema em rede sem fio deixando o EXE em uma servidor com pasta compartilhada, ai coloquei ele como local e a base de dados apenas no servidor e ficou avião, mas isso por que meu EXE é enorme.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
cacg57
Usuário Nível 1
Usuário Nível 1
Mensagens: 17
Registrado em: 28 Nov 2009 13:06
Localização: Florianopolis - SC

Re: criação de indices cdx no xharbour

Mensagem por cacg57 »

O sistema é composto de vários executáveis.
Cada modulo é um exe.
Ex.: Clientes -> INCLUSAO, ALTERAÇAO, CONSULTA, LISTAGENS
Tenho um bat que vai chamando os exe conforme a necessidade.
O problema é a demora para carregar cada exe, de 3 a 4 segundos.

Já tentei compactar com upx -9 prog.exe , ficou com um tamanho bem menor, mas a demora prossegue.

Cada exe é executado na máquina local, buscando os dados nos servidores.
O desempenho do xHarbour é excelente comparado ao clipper, ao listar relatórios, calcular, incluir registros, sempre é mais rápido.
Até mesmo na indexação dos arquivos o xHarbour supera o clipper em velocidade, uns 30% mais rápido.

O meu problema é na hora de carregar os exe. Meus exe tem um tamanho médio de 345 kb.

Vou tentar indexar os arquivos com o xHarbour usando SET DBFLOCKSCHEME TO 2, como me sugeriu.

Obrigado Leonardo

Augusto
Responder