ULTILITARIO DE INDEXAÇÃO

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

ULTILITARIO DE INDEXAÇÃO

Mensagem 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
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
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)
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem 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 !
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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.
"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}
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
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)
Dr_Spock
Usuário Nível 1
Usuário Nível 1
Mensagens: 17
Registrado em: 05 Jan 2007 13:40
Localização: Brasilia - DF

Mensagem 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
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem 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 !
C:\Xharbour\Xdev\Fw\VSX
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem 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 ???
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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???)
"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}
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

ahahahahah grintando em maiuscula é foda hahahahhahaah


ta mais pra chorando que gritando !


vou mandar o sistema inteira pra vc ver ...
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
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)
diogenes_varela
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 04 Nov 2006 19:33
Localização: Brasília - DF

Mensagem 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...
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
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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.
"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}
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
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)
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem 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!
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.
Responder