Consulta ficou lenta - to quase desistido do clipper!!!

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
marbio
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 29 Jul 2004 16:26

Consulta ficou lenta - to quase desistido do clipper!!!

Mensagem por marbio »

Boa Noite,


Tenho um sistema para POSTO DE SAUDE no meu municipio, funciona desta forma tem um servidor, e mais oito estabelecimento pindurado numa rede WIRELLES, ja ate troquei AP 2100/108MBPS e placas wirelles tbm 108MBS, por hora deu certo, mas esta ficando lento outra vez sao 8 PSF o meu o sistema contrala desde consulta etc.. bla bla. o bando de dados esta ficando muito grande. para fazer consulta, como faço para fazer uma consulta melho. eu uso indexar, criar indece.

Eu tava vendo o SET SCOP sera que vai me ajudar nisso, ja tentei fazer a rotina mas nao consegui. de nenhuma forma. as explicação que tem no forum na entendi.


fico no aguardo...

t+

Marbio
Sempre há uma solucao para os nossos problema clipper.....
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem por alaminojunior »

Você não deu informações sobre o sistema como rdd utilizado, entre outras.
Caso este sistema seja compilado com Clipper 5.2, voce pode fazer uso da RDD SIX, que vai lhe dar muitas alegrias, haja vista os post´s já colocados.
Agora se você usa Clipper 5.3, daí tem que ser a RDD CDX, que vai permitir que você use o tal Set Scope, mas mesmo assim depende de politicas de como se trabalha com os dados.
Agora...
se nada disso te encorajou ou não deu certo, a saída pode estar no xHarbour com outras RDD´s para uso com bases de dados como mysql e cia., uma vez que vc trabalha com acesso remoto (pelo menos foi isso que entendi).
Se for o caso, faça uma busca pelo fórum e poste as dúvidas na seção xHarbour.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

Marbio Boa Noite.
Se vc utiliza indices CDX.
Pode usar o Set Scope

1. Opção

Código: Selecionar todos

  REQUEST DBFCDX
  RDDSETDEFAULT( 'DBFCDX' )
  
  use seubanco
  // criando indice para o campo do filtro
  // caso ja tiver o indice basta usar o set index to
  index on CAMPO  to seubanco   

  // Inicio do Filtro
  set scope top "00001"  
  // Fim do Filtro
  set scope bottom "00002"   
  gotop() 
    
  // Vai mostrar os dados filtrados
  browse()

  return nil 
  
2. Opção
Usando Indices temporários crie ele na estação local de preferencia

Código: Selecionar todos

  USE SEU BANCO

  INDEX ON CAMPO TO SEUBANCO FOR CODIGO="00001" .OR. CODIGO="00002"

  DBGOTOP()
  BROWSE() 
  RETURN NIL
  
3. Opção Usando Set Filter
USANDO SET FILTER

Código: Selecionar todos

  USE SEUBANCO
  INDEX ON CAMPO TO SEUBANCO   

  SET FILTER TO CAMPO="00001" .or. CAMPO="00002"  

  dbgotop()
  browse() 
  Return Nil
  
Se eu tiver errado nos exemplos citados favor alguém me corrija...normalmente eu uso Set Scope...eu citei as demais por elas existirem e que tb podem ser uma solução pro seu problema...
toya
Usuário Nível 3
Usuário Nível 3
Mensagens: 157
Registrado em: 26 Jul 2004 16:51
Localização: Campo Grande/MS - Brasil
Contato:

Mensagem por toya »

marbio, se puderes me adicone no vosso MSN para conversarmos sobre o assunto "Sistema de Saude - lento com Clipper"...: toyasis@yahoo.com.br
Elcio Carlos
(toya)
Ahora en la version 6.5
toyasis@gmail.com (e-mail)
toyaskype (skype)
http://www.toyanet.com.br
https://www.facebook.com/profile.php?id=100009195956044

FWH 11.8+PellesC+xHarbour.org 1.2.1+SqlRDD
Clippeiro por opção, Fivewiner por amor ao Clipper...
2015 - Iniciante/Aprendiz de HMG...
Avatar do usuário
marbio
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 29 Jul 2004 16:26

Mensagem por marbio »

Bom dia,

O sistema é em clipper 5.3, estou usando NTX, e multi usuario. alem dos 8 PSF, deve ter mais 10 computador conectado na rede. estou ficando meio pertubado com isso.

desde ja agradeco sua atenção.

Marbio.
Sempre há uma solucao para os nossos problema clipper.....
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Marbio, já que usa clipper 5.3 pode migrar facilmente para DBFCDX, vc só a ganhar, e não vai ser nescessario muita alteração. De uma procurada no forum que tem inumeros post de como usar DBFCDX.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
marbio
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 29 Jul 2004 16:26

Mensagem por marbio »

Boa Noite,

Me parece que agora a coisa ta indo.....

duvidas?

colquei

REQUEST DBFCDX
RDDSETDEFAULT( 'DBFCDX' )


Mas a onde que eu index nao mudei, para Tag vou deicar como ta posso?

para nao precisar alterar o sistema inteiro!

estou com duvida na pesquisa com set scope,

eu uso assim no ntx

index on codcl to (varusa) for(codcl=nvar .and. dtpaga>=xinicio .and. dtpaga<=xfinal)
set index to (varusa)

como procedor com scope.

fico no agurado...
t+
Sempre há uma solucao para os nossos problema clipper.....
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Olá Marbio,
marbio escreveu: Mas a onde que eu index nao mudei, para Tag vou deicar como ta posso?
Não é o ideal mas pode, na minha opnião deveria usar um arquivo de indice com varias tag para cada dbf , ex:

Código: Selecionar todos

   index on CODIGO     TAG 1 to AGENDA
   index on NOME       TAG 2 to AGENDA
   index on TELEFONE1  TAG 3 to AGENDA
   index on TELEFONE2  TAG 4 to AGENDA
   index on CELULAR    TAG 5 to AGENDA
   index on CIDADE     TAG 6 to AGENDA
   index on TIPO       TAG 7 to AGENDA
   index on TIPO+NOME  TAG 8 to AGENDA
Veja a vantagem em ter um unico arquivo de indice. Você diminui a quantidade "files" aberto no MS-DOS, outra vantagem, vc pode usar "SET AUTOPEN ON" no inicio do seu sistema para abrir automaticamente os indices junto com os DBF(obs: o DBF e INDICE deve ter o mesmo nome).
estou com duvida na pesquisa com set scope,
eu uso assim no ntx

index on codcl to (varusa) for(codcl=nvar .and. dtpaga>=xinicio .and. dtpaga<=xfinal)
set index to (varusa)

como procedor com scope.
Bom vou citar dois exemplos de varios que vc pode vir a ter:

Código: Selecionar todos

....
// crie um indice fixo pelo campo "DTPAGA" e use assim:
// Index on DTPAGA  TAG 4 to nome_indice

....
....
Sele no_alias  // nome do alias ou dbf...
dbsetorder(4)  // ordem de indice DTPAGA
ORDScope(0, xinicio)   // inicio do filtro
ORDScope(1, xfinal)   // fim do filtro
DBGOTOP()   
set filter codcl=nvar
....
....
....
Segundo exemplo:

Código: Selecionar todos

....
// crie um indice fixo pelo campo "DTPAGA + CODCL" e use assim:
// Index on DTOS(DTPAGA)+STR(CODCL)  TAG 4 to nome_indice


....
....
Sele no_alias  // nome do alias ou dbf...
dbsetorder(4)  // ordem de indice DTPAGA
ORDScope(0, DTOS(xinicio) + STR(nvar))   // inicio do filtro
ORDScope(1, DTOS(xfinal) + STR(nvar))   // fim do filtro
DBGOTOP()   
....
....
....
O caminho é esse....boa sorte, e qualquer duvida prende o grito...

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
marbio
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 29 Jul 2004 16:26

Mensagem por marbio »

Boa Noite,,

Muito obrigado pela orientação,
estou fazendo as mudanças,

para teste. logo logo dou retorno

muito obrigado mesmo.

t+
Sempre há uma solucao para os nossos problema clipper.....
Avatar do usuário
marbio
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 29 Jul 2004 16:26

erro

Mensagem por marbio »

Boa Noite,

Me parece que ta dando certo, ta dando este erro.

ORDCREATE(0) INTERNAL ERROR 8002


Código: Selecionar todos

Request _DBFCDX
DbsetDriver("_DBFCDX")

clear
set century on
set epoch to 1960
set score off
set delete on
set date brit

Request _DBFCDX
DbsetDriver("_DBFCDX")

xcod=0
xinicio=ctod("")
xfinal=ctod("")

use arqmorto excl new 
IF !neterr() 
   pack 
   delete file arq1.CDX 
   index on codcl+data to arq1
   set date BRIT 
   use 
ELSE 
   @ 16,13 say "ARQUIVO EM USO!" COLOR "R*/W" 
ENDIF 

@02,01 say 'Codigo ' get xcod pict '9999999999'
@03,01 say " data " get xinicio
@04,01 say " data " get xfinal 
read

horainicial=time()

use arqmorto index arq1

         dbsetorder(1)
         ordscope (0,xcod+xinicio)
         ordscope (1,xcod+xfinal)
         dbgotop()


horafinal=time()
@23,10 say 'Processo realizado em: ' +elaptime(horainicial,horafinal)

         aColunas:={'Data','Produto','Qtd','Unit','Venda','dtpaga'}
         dbedit(06,06,19,74,aColunas)
Sempre há uma solucao para os nossos problema clipper.....
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

Olha cara, o SETSCOPE vai ajudar muito, eu usei muito na SIX e hoje uso no xHARBOUR.

Mas para seu caso, como ta via wireless, unidade mapeada, acho mais seguro o amigo começar a pensar em xHarbour, em 1 dia ele pode resolver seus problemas por toda a vida.

Compila nele e coloca rodando num servidor de aplicação windows ou linux, vc nao vai se arrepender, para o usuario nao muda nada e o sistema decola, tivemos muitas experiencias na migração de sistema nos ultimos 4 anos, é tudo muito tranquilo e o resultado, pode ter certeza, é o melhor, muitos do forum usam e acredito que ninguem se arrependeu.
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Mensagem por Itamar M. Lins Jr. »

vagucs escreveu:Olha cara, o SETSCOPE vai ajudar muito, eu usei muito na SIX e hoje uso no xHARBOUR.

Mas para seu caso, como ta via wireless, unidade mapeada, acho mais seguro o amigo começar a pensar em xHarbour, em 1 dia ele pode resolver seus problemas por toda a vida.
Não fala assim, porque o Maligno tem um troço.

:-)

Saudações
Itamar M. Lins Jr.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: erro

Mensagem por sygecom »

marbio escreveu:Boa Noite,

Me parece que ta dando certo, ta dando este erro.
ORDCREATE(0) INTERNAL ERROR 8002
Olá Marbio,
Primeiro eu vi que no seu exemplo vc postou duas vez as seguintes linhas:

Código: Selecionar todos

Request _DBFCDX
DbsetDriver("_DBFCDX")
Pode tirar as duas segundas linhas repetidas. Sobre o seu exemplo, eu faria da seguinte maneira:

Código: Selecionar todos

Request _DBFCDX
DbsetDriver("_DBFCDX")

clear
set century on
set epoch to 1960
set score off
set delete on
set date brit
set autopen off

xcod=0
xinicio=ctod("")
xfinal=ctod("")

use arqmorto excl new
IF !neterr()
   pack
   delete file arq1.CDX
   index on str(codcl)+dtos(data) to arq1
   set date BRIT
   set index to arq1
use
ELSE
   @ 16,13 say "ARQUIVO EM USO!" COLOR "R*/W"
ENDIF

@02,01 say 'Codigo ' get xcod pict '9999999999'
@03,01 say " data " get xinicio
@04,01 say " data " get xfinal
read

horainicial=time()

         dbsetorder(1)
         ordscope (0,str(xcod)+dtos(xinicio))
         ordscope (1,str(xcod)+dtos(xfinal))
         dbgotop()

horafinal=time()
@23,10 say 'Processo realizado em: ' +elaptime(horainicial,horafinal)

         aColunas:={'Data','Produto','Qtd','Unit','Venda','dtpaga'}
         dbedit(06,06,19,74,aColunas) 
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder