ULTILITARIO DE INDEXAÇÃO
Moderador: Moderadores
ULTILITARIO DE INDEXAÇÃO
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
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
C:\Xharbour\Xdev\Fw\VSX
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
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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
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 !
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 !
C:\Xharbour\Xdev\Fw\VSX
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.
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.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
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
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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
- 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
- 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
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
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
C:\Xharbour\Xdev\Fw\VSX
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???)
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???)
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
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
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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
-
diogenes_varela
- Usuário Nível 3

- Mensagens: 206
- Registrado em: 04 Nov 2006 19:33
- Localização: Brasília - DF
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...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
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...
Os computadores não sabem o que fazem. Nós, na maioria das vezes, também não...
E disse ao Programador: "Todos os teus programas terão erros e irás corrigi-los até ao fim dos teus dias". Gen. 1:9
E disse ao Programador: "Todos os teus programas terão erros e irás corrigi-los até ao fim dos teus dias". Gen. 1:9
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.
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.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
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
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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
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!
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!
Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.

