Consulta mais rápida

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Ricardo Sales Ribeiro
Usuário Nível 3
Usuário Nível 3
Mensagens: 279
Registrado em: 13 Jul 2004 18:06
Localização: Fortaleza-Ceara

Consulta mais rápida

Mensagem por Ricardo Sales Ribeiro »

Olá Amigos
Boa Tarde

Estou aqui novamente com mais uma dúvida que gostaria da ajuda dos amigos: É o seguinte:
Tenho dois Arquivos:
CadOds.Dbf Com os seguintes campos:
NroDos,c,08
DatEmi,D,08
CodUsu,C,10
CodEqu,C,03
NomEqu,C,12

IteOds.Dbf Com os seguintes campos:
OrdIte,C,08
CodSer,C,03
DesSer,C,45
VlrSer,N,10,02

Ambos os arquivos estão indexados pelo primeiro campo, ou seja: NroOds e OrdIte ok

Fiz uma consulta da seguinte maneira:
Mostro no DbEdit todos os registros do CadOds

Quando eu teclo numa determinada ordem de serviço, o sistema me mostra os itens dessa ordem, só que estar demorando
para mostrar os itens, ambos os arquivos tem mais de 130.000 itens. Como fazer para essa consulta ser mais rápido e ao mesmo tempo em dois computadores em rede, ou seja, ao mesmo tempo dois usuários consultando?

Estar da seguinte maneira, quando eu escolho a ordem de serviço, eu abro o arquivo de itens, gero um arquivo temporário
com os itens dessa ordem e em seguida mostro num dbedit, quando saio fecho esse arquivo, deleto esse arquivo temporário e volto para o arquivo de ordens.

Eu uso índices Ntx.

Poucos registros, mostram rapidinho, mas agora estar demorando para mostrar, existe outra forma de rotina onde posso
mostrar mais rápido?

Atenciosamente.
Ricardo Sales
Fortaleza-Ce
lodara53@yahoo.com.br
lodara53@hotmail.com
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Consulta mais rápida

Mensagem por alxsts »

Olá!

Se você estiver usando Clipper 5.3 poderá usar a função OrdScope().

Já no 5.2, teria a opção de usar SubNtx() ou as rotinas TBrowse For While do Rick Spence, que são ótimas.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Ricardo Sales Ribeiro
Usuário Nível 3
Usuário Nível 3
Mensagens: 279
Registrado em: 13 Jul 2004 18:06
Localização: Fortaleza-Ceara

Consulta mais rápida

Mensagem por Ricardo Sales Ribeiro »

Olá Boa Noite

Amigo alxsts

Eu uso a versão 5.2, e confesso que não sei utilizar esta função que o amigo sugeriu. Seria pedir muito se o amigo
me ensinasse, estou com esse problema e preciso resolver.


Atenciosamente
Ricardo Sales
Fortaleza-Ce
lodara53@yahoo.com.br
lodara53@hotmail.com
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Consulta mais rápida

Mensagem por alxsts »

Olá!

Não conheço seu sistema mas, não seria possível migrar para Harbour? Isto traria várias vantagens e a migração consiste em apenas compilar o teu sistema com Harbour, ficando em modo console mesmo. Os sistemas em Clipper, 16 bits, estão ficando cada vez mais restritos a poucos sistemas operacionais.

Quanto ao exemplo, vou ver o que consigo.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Consulta mais rápida

Mensagem por rochinha »

Amiguinho,

Exemplos:

Código: Selecionar todos

   // Ordenado por IDPEDIDO
   dbSelectArea( "PEDIDOS" )
   M->IDPEDIDO := PEDIDOS->IDPEDIDO
   ...
   dbSelectArea( "ITENS" )
   OrdSetFocus( 1 ) // Ordem pelo campo IDPEDIDO
   OrdScope(0, STR(M->IDPEDIDO,6,0) )
   OrdScope(1, STR(M->IDPEDIDO,6,0) )
   dbGoTop()
   ...
Outros exemplos, filtragem de itens vinculados a um cliente. O filtro pega somente seus itens, mas dentro de um certo periodo

Código: Selecionar todos

   // Ordenado por IDCLIENTE
   dbSelectArea( "CLIENTES" )
   nIDCliente := CLIENTES->IDCLIENTE
   ...
   dDataInicio := ctod("01/01/2000")
   dDataFinal  := date()
   //
   dbSelectArea( "ITENS" )
   OrdSetFocus( 16 ) // Ordem indexada pelos campos IDCLIENTE e DATAPED
   OrdScope(0, strzero(nIDCliente,5,0)+DTOS(dDataInicio) )
   OrdScope(1, strzero(nIDCliente,5,0)+DTOS(dDataFinal) )
   dbGotop()
   ...
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Eros
Usuário Nível 3
Usuário Nível 3
Mensagens: 291
Registrado em: 19 Dez 2008 19:23
Localização: Goiania

Consulta mais rápida

Mensagem por Eros »

Ricardo, bom dia..

Para o caso que vc relatou, eu uso recurso do TBrwose, e nao tenho problemas com velocidade..

Nos fontes que te mandei da contabilidade, tem relatorios que sao gerados no video e depois enviados para impressora atraves do F9.

Nesses relatorios ha varias execuções em que faço a rotina que vc precisa, de forma rapida. Numa delas, que é a conciliaçao contabil, é possivel, inclusive alterar um lançamento contabil em conciliaçao, atraves da TBrowse.

Se voce pesquisar nos fontes, vai encontrar o exemplo de aplicaçao do tbrowse e resolver seu problema.

E isso é nativo do clipper 5.2, nao é funcao especifica.
Responder