Página 1 de 1
Consulta ficou lenta - to quase desistido do clipper!!!
Enviado: 09 Abr 2008 21:32
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
Enviado: 09 Abr 2008 23:33
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.
Enviado: 09 Abr 2008 23:58
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...
Enviado: 10 Abr 2008 07:46
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
Enviado: 10 Abr 2008 10:19
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.
Enviado: 11 Abr 2008 18:19
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.
Enviado: 11 Abr 2008 20:30
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+
Enviado: 11 Abr 2008 22:32
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
Enviado: 15 Abr 2008 21:41
por marbio
Boa Noite,,
Muito obrigado pela orientação,
estou fazendo as mudanças,
para teste. logo logo dou retorno
muito obrigado mesmo.
t+
erro
Enviado: 17 Abr 2008 20:03
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)
Enviado: 18 Abr 2008 01:02
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.
Enviado: 18 Abr 2008 06:34
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.
Re: erro
Enviado: 18 Abr 2008 06:51
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:
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)