Página 1 de 1

Consulta mais rápida

Enviado: 21 Fev 2014 16:53
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.

Consulta mais rápida

Enviado: 21 Fev 2014 17:32
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.

Consulta mais rápida

Enviado: 21 Fev 2014 18:56
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

Consulta mais rápida

Enviado: 21 Fev 2014 21:12
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.

Consulta mais rápida

Enviado: 22 Fev 2014 00:55
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()
   ...

Consulta mais rápida

Enviado: 22 Fev 2014 11:42
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.