Página 1 de 2
criação de indices cdx no xharbour
Enviado: 14 Nov 2009 14:00
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
Re: criação de indices cdx no xharbour
Enviado: 14 Nov 2009 16:56
por alaminojunior
Vamos lá meu caro:
Acrescente estas linhas no início do seu programa;
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:
ou usa o funcional:
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.
Re: criação de indices cdx no xharbour
Enviado: 14 Nov 2009 22:47
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
Re: criação de indices cdx no xharbour
Enviado: 15 Nov 2009 22:14
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.
Re: criação de indices cdx no xharbour
Enviado: 16 Nov 2009 04:02
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.
Re: criação de indices cdx no xharbour
Enviado: 23 Nov 2009 18:00
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
Re: criação de indices cdx no xharbour
Enviado: 23 Nov 2009 18:20
por alaminojunior
Sem problemas. Ordsetfocus é a versão funcional do comando Set Order To ...
Re: criação de indices cdx no xharbour
Enviado: 23 Nov 2009 18:30
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().
Re: criação de indices cdx no xharbour
Enviado: 24 Nov 2009 02:28
por lugab
Valeu, pessoal, Cês são "os caras
Gabriel"
Re: criação de indices cdx no xharbour
Enviado: 28 Nov 2009 11:58
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
Re: criação de indices cdx no xharbour
Enviado: 09 Dez 2009 15:50
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
Re: criação de indices cdx no xharbour
Enviado: 12 Dez 2009 19:16
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
Re: criação de indices cdx no xharbour
Enviado: 01 Fev 2010 11:47
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
Re: criação de indices cdx no xharbour
Enviado: 01 Fev 2010 11:53
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.
Re: criação de indices cdx no xharbour
Enviado: 02 Fev 2010 17:04
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