Página 1 de 2
ULTILITARIO DE INDEXAÇÃO
Enviado: 05 Jan 2007 09:49
por ederxc
BOM DIA PESSOAL !
SEGUINTE QUANDO LANÇO UM NOVO DOCUMENTO EM UMA TABELA E DEPOIS VOU VELO NO DBEDIT() ELE Ñ APARECE A Ñ SER QUE EU REINDEXE NOVAMENTE MEU SISTEMA
CRIEI UM SISTEMA SÓ PARA INDEXAR E NOS (PRG´S ) EU APENAS CHAMO O ARQUIVO INDEXADO
NO ULTILITARIO ESTA ASSIM ...
DO WHILE .T.
......USE FORNECEDOR
......INDEX ON COD TO XFOR
ENDD
......................................................................................................................
NO PROG CHAMO ASSIM
USE FORNECEDOR INDEX XFOR
..........................................................................................................
OU SEJA O PROBLEMA É QUE O ULTIMO ARQUIVO QUE LANÇO Ñ ENTRA NA INDEXAÇÃO E POR ISSO Ñ APARECE NO DBEDITE() OU NA PESQUISA FEITA EM UM RELATÓRIO , MAS O MAIS GOSADO DE TUDO ISSO É QUE NO DBSEEK() ELE APARECE MAS COMO RELATÓRIOS Ñ USAM DBSEEK()
ENTÃO Ñ APARECEM
EX:
IF DATA>=DATA1 .AND. DATA>=DATA2
CONTINUA...
EXTRANHO TBM Ñ APARECER NO DBEDIT() JA QUE É O PRÓPRIO BANCO DE DADOS NA TELA ...
SE ALGUEM PUDER ME AJUDAR FICAREI MUITO GRATO ! :)Pos
Enviado: 05 Jan 2007 10:18
por Clipper
Prezado Colega
Existe algum erro de procedimento em seu programa, pois fica inviável fazer um sistema que precise ser reindexado constantemente, se você for utiliza-lo em rede então fica impraticável. Faça o seguinte teste :
No seu sistema coloque :
USE FORNECEDOR
SET INDEX TO XFOR
Se houverem outros arquivos de indice coloque-os também, exemplo :
USE FORNECEDOR
SET INDEX TO XFOR,NFOR,ZFOR
Até logo.
Marcelo
Enviado: 05 Jan 2007 10:32
por ederxc
CARO MARCELO NESSE CASO QUE VC ME PASSOU CONTINUA NA MESMA ... APENAS UMA FORMA DIFERENTE DE FAZER O QUE JA ESTOU FAZENDO
USE FORNECEDOR
SET INDEX TO XFOR
OU
USE FORNECEDOR INDEX XFOR
ISSO É A MESMA COISA ...
MAS MESMO ASSIM Ñ DESPRESEI A INDICAÇÃO DO AMIGO E CLARO FUI TESTAR .. MAS CONTINUA NA MESMA !
É COMO SE EU LANÇA-SE UM NOVO REGISTRO E ELE FICA-SE POR FORA DO SISTEMA ATÉ SER REINDEXADO ... TODOS SABEMOS QUE FICAR INDEXANDO O SISTEMA TODA VEZ QUE ENTRA NELE , O SISTEMA VAI FICAR LENTO DEVIDO A O NUMERO DE REGISTROS MAS SE EU Ñ REINDEXAR Ñ APARECE DEVE TER ALGUMA SOLUÇÃO PRA ISSO !
Enviado: 05 Jan 2007 13:05
por gvc
Sou obrigado a concordar com o amigo Clipper. Deve haver algum erro na sua rotina de relatório ou inclusão de dados.
Eu acredito que seja na inclusão de dados.
Veja se vc não esta abrindo novamente o dbf sem os índices ou se não esta fechando os índices em alguma função.
Se achar necessário, poste a sua rotina ou mande o prg para verificar-mos como ele funciona.
Outro teste. Inclua o registro. Saia do sistema e entre novamente. Imprima o relatório para ver se o registro aparece.
Enviado: 05 Jan 2007 13:44
por Clipper
Os comandos INDEX e SET INDEX tem diferenças.
Como você não passou maiores mdetalhes do seu sistema achei que pudesse ser isso, o comando SET INDEX é usado primordialmente em rede e quando você tem mais de um indice, o que é muito comum. Seria interessante que você postasse o código onde faz a inclusaõ do registro e do programa onde faz a chamada do DBEDIT().
Passe também qual a versão do Clipper que está usando.
Se ainda não tiver coloque um DBCOMMIT() no final da inclusão dos registro para forçar a gravação dos dados.
Até logo.
Marcelo
Enviado: 05 Jan 2007 13:52
por Dr_Spock
- Isto me aconteceu uma vez em um sistema funcionando em rede e resolvi colocando simplesmente um COMMIT apos a gravacao do registro.
- Pode tambem acontecer que no DBEDIT ou BROWSE que voce esta utilizando para exibir os registro apos a inclusao, a funcao de controle de teclas nao esteja com o codigo de retorno para REFRESH de tela( 2 ou 1 dependendo da funcao utilizada), ai o registro esta gravado, mas nao e exibido e da a impressao de que nao foi salvo.
- Espero ter ajudado de alguma maneira.
- Abracao
Enviado: 05 Jan 2007 15:14
por ederxc
GALERA LOGO ABAIXO DO SET INDEX FORNECEDOR TO XFOR
EU COLOQUEI O COMANDO REINDEX E FUNCIONOU MAS ESTOU COM UMA DUVIDA
REINDEXAR UM ARQUIVO SERIA A MESMA COISA DE INDEXAR ELE NOVAMENTE E DEIXARIA MEU SISTEMA AINDA MAIS LENTO !
Enviado: 05 Jan 2007 16:25
por ederxc
amigo Dr. vc poderia me explicar direito sobre este REFRESH e como devo inseri-lo !
CARO AMIGO GVC FIZ COMO VC FALOU PARA TESTAR .. INSERI UM REGISTRO SAI DO SITEMA E DEPOIS ENTRI NOVAMENTE PARA IMPRIMIR UM RELATÓRIO E MESMO ASSIM NADA FEITO .. SOMENTE REINDEXANDO ELE APARECE
MINHA ROTINA DE INDEX ESTA ASSIM
DO WHILE .T.
....USE FORNECEDOR
....INDEX ON FORNECEDOR TO XFORN
ENDDO
ESTA CORRETA OU FALTA ALGO AE

Enviado: 05 Jan 2007 16:46
por gvc
1) Pq o do-while na indexação?
DO WHILE .T.
....USE FORNECEDOR
....INDEX ON FORNECEDOR TO XFORN
ENDDO
2) Reindexar os arquivos toda vez que entra no sistema não é solução para o seu problema. É um paleativo que vai prejudicar mais do que ajudar.
3) Se após entrar com o registro, vc consegue achar o dado com o dbseek, sua rotina de entrada esta correta. Temos que ver sua rotina de relatório.
3) Mande ou poste o prg que faz a inclusão dos dados e relatório.
gvcortez@uol.com.br
4) (Pq vc esta gritando... escrevendo em maiusculas???)
Enviado: 05 Jan 2007 17:15
por ederxc
ahahahahah grintando em maiuscula é foda hahahahhahaah
ta mais pra chorando que gritando !
vou mandar o sistema inteira pra vc ver ...
Enviado: 05 Jan 2007 17:37
por Clipper
Na verdade o REINDEX vai piorar, pois além dele reindexar ele dá um pack no arquivo, aí o desempenho do sistema vai lá pra baixo.
Só dá pra descobrir este problema você postando o código, pois esse não parece ser exatamente um problema e sim um erro no código.
Até logo.
Marcelo
Enviado: 05 Jan 2007 17:50
por diogenes_varela
ederxc escreveu:
CARO AMIGO GVC FIZ COMO VC FALOU PARA TESTAR .. INSERI UM REGISTRO SAI DO SITEMA E DEPOIS ENTRI NOVAMENTE PARA IMPRIMIR UM RELATÓRIO E MESMO ASSIM NADA FEITO .. SOMENTE REINDEXANDO ELE APARECE
1. Esse DO WHILE que você está usando não faz o menor sentido. Pode eliminar sem sombra de dúvidas! Até porque, você não falou, mas deveria ter um SKIP e na falta dele o sistema entraria em um LOOP ETERNO...
2. Quando você usa o comando INDEX é criado um arquivo que não é atualizado, a menos que você solicite, usando o REINDEX .
Após a inclusão de um registro, você terá, obrigatoriamente, que ir para o index (com SET INDEX TO arq_index) e rodar o REINDEX. Seu arquivo indexado estará atualizado.
A menos que você use, como eu faço sempre, um REINDEX ao iniciiar o programa. De tanto passar raiva....
- Você não citou, mas confirme se depois do "INDEX ON FORNECEDOR TO XFORN" você está acrescentando alguma condição...
Enviado: 05 Jan 2007 17:55
por gvc
Discordo, caro colega.
O reindex não executa pack de arquivo. O contrário, teóricamente, sim.
Se bem que nunca vi um clippeiro que não crie novamente os índices após um pack no arquivo. Somos bonzinhos, legais, divertidos, mas não gostamos de arriscar quando o assunto são dados de sistema.
Mas isso é motivo de bate-papo de barzinho.
Espero que o nosso amigo ederxc tenha resolvido o seu problema agora.
Boa sorte.
Enviado: 06 Jan 2007 05:27
por Clipper
Foi mal, é que uso o driver CDX e no CDX o REINDEX executa sim um PACK no arquivo, esqueci que o colega usava NTX.
Bom, o importante é que o problema foi resolvido, ele me mandou o sistema e descobri o problema.
Na inclusão ele usava :
SET INDEX TO XFORN
Indexado pelo campo FORN
Na consulta
SET INDEX TO XFOR
Indexado pelo campo COD
Ou seja ele tem 2 indices mas só estava abrindo 1 na rotina de inclusão, logo o indice XFOR não estava sendo atualizado.
Até logo.
Marcelo
Enviado: 08 Jan 2007 03:28
por Stanis Luksys
Olá amigo,
Se me permite mais uma vez fazer um comentário talvez inoportuno, vou dar uma dica, apenas como sugestão.
Crie uma rotina de indexação geral de todos os arquivos do sistema e outras rotinas dos mais importantes com o xharbour e disponibilize num executável a parte, que pode ser chamado diretamente ou pelo comando RUN.
Eu mesmo nunca tinha feito isso, porém em testes realizados aqui mesmo no fórum, ficou comprovado que uma rotina de indexação sendo executada com o xHarbour leva em média 5 vezes menos tempo para ser executada. O teste foi feito com um milhão de registros e, no clipper levou 108 segundos contra 18 segundos do xHarbour!!!
Os meus aplicativos que não pude migrar por motivos quaisquer, fiz isso e achei o resultado bem interessante.
Como eu disse, é só uma sugestão....
Falou!