Clipper On Line • Ver Tópico - Como limitar a consulta em tabelas dbf ???

Como limitar a consulta em tabelas dbf ???

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Como limitar a consulta em tabelas dbf ???

Mensagempor Cisino Junior » 17 Jul 2017 17:27

Boa tarde!

Usando SQL é muito fácil limitar uma consulta ao banco de dados para listar dados exemplo:

SELECT * FROM table1 LIMIT 100


Agora, como fazer isso no DBF? Estamos implementando o LETODB(fork) no sistema e está funcionando legal, mas queremos diminuir o tráfego de dados. Atualmente ao abrir uma tabela usamos o componente Browser do HMG para mostrar os dados, mas o mesmo lista TODOS os registros, como posso limitar essa consulta?

Atenciosamente,
Cisino Junior.
HMG 3.4.3 + DBF, Java, MySQL, PostgreSQL, PHP, JavaScript + HTML5 + CSS3, Bootstrap, Spring, Thymeleaf.
Cisino Junior
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 67
Data de registro: 14 Abr 2016 13:12
Cidade/Estado: Rio de Janeiro
Curtiu: 12 vezes
Mens.Curtidas: 5 vezes

Como limitar a consulta em tabelas dbf ???

Mensagempor Kapiaba » 18 Jul 2017 09:44

Usando ORDSCOPE() ou INDEX ON... MEMORY
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

Como limitar a consulta em tabelas dbf ???

Mensagempor Cisino Junior » 18 Jul 2017 10:11

Kapiaba escreveu:Usando ORDSCOPE() ou INDEX ON... MEMORY


Bom dia, Kapiaba, Obrigado pela resposta, vou testar sua dica. Valeu!!!

Atenciosamente,
Cisino Junior.
HMG 3.4.3 + DBF, Java, MySQL, PostgreSQL, PHP, JavaScript + HTML5 + CSS3, Bootstrap, Spring, Thymeleaf.
Cisino Junior
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 67
Data de registro: 14 Abr 2016 13:12
Cidade/Estado: Rio de Janeiro
Curtiu: 12 vezes
Mens.Curtidas: 5 vezes

Como limitar a consulta em tabelas dbf ???

Mensagempor Itamar M. Lins Jr. » 18 Jul 2017 19:18

Ola!
Agora, como fazer isso no DBF? Estamos implementando o LETODB(fork) no sistema e está funcionando legal, mas queremos diminuir o tráfego de dados. Atualmente ao abrir uma tabela usamos o componente Browser do HMG para mostrar os dados, mas o mesmo lista TODOS os registros, como posso limitar essa consulta?


Não tem como. Porque não precisa, só vem o que vc chama. (Via Leto[f] ou NetIO).
O comando "USE" abrirá, e irá trazer alguns registros! isto é, somente o que cabe nas linhas do browse, por exemplo.
Não precisa se preocupar com LIMITE.
Quando abre um DBF qualquer com "milhões" de registro, o ponteiro fica por padrão no primeiro. Não chama nenhum só se posiciona, Se no browse cabe 50 ele puxa apenas os cinquenta registros, mesmo que tenha milhões. Não cria uma MALHA com a sentença... dos fields(campos) da tabela, como em SQL com 100 e só mostra 50.
Vc trata diretamente com a base de dados, não existe uma camada intermediaria virtual.
No LetoDbf tem a opção "Cache_Records = 60", isto é o servidor LetoDBf armazena em memória 60 registros de vez, para não ficar lendo o tempo todo o disco registro a registro.

Se não quer mostrar todos os registros em DBF usamos a cláusula(flag) "FOR" ou "WHILE", mas tem que ter um propósito
index on quantidade TAG XYZ for QUANTIDADE >= 100 // é só um exemplo.

Resumindo, o filtro vc faz na criação de algum índice e abre ele, ou pode usar o comando "FILTER TO" não recomendado o uso em redes.

Essa situação de ler todo o DBF, sobrecarga na rede, só ocorre com redes mapeadas. Ai está a má reputação do DBF.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Como limitar a consulta em tabelas dbf ???

Mensagempor asimoes » 18 Jul 2017 21:21

Uma ideia seria fazer append from para uma tabela temporária, ai você pode limitar a qtd de registros do dbf, tipo recno() <= 100
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Como limitar a consulta em tabelas dbf ???

Mensagempor asimoes » 18 Jul 2017 21:24

Exemplo:

  PROCEDURE Main

      USE Address NEW
      COPY STRUCTURE TO Tmp          // create an intermediate file
      USE Tmp

      APPEND FROM Address FOR RECNO() <= 100

      Browse()
      USE

      ERASE Tmp.dbf                  // delete intermediate file
   RETURN


Transforma isso em uma função e seja feliz
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Como limitar a consulta em tabelas dbf ???

Mensagempor Itamar M. Lins Jr. » 19 Jul 2017 09:19

Olá!
Como eu disse, usando o LetoDbf, limitar os registros do DBF, para diminuir o tráfego na rede, não faz sentido.
Se deseja mostrar poucos registros, basta diminuir as linhas do browse.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Como limitar a consulta em tabelas dbf ???

Mensagempor JAIR RANGEL » 19 Jul 2017 10:38

Olá, Itamar!

Obrigado por suas explicações.
Agora ficou claro o que acontece quando uma tabela dbf é aberta usando o letodb(f). Não importa a quantidade de registros existentes na tabela. Os registros apresentados no componente browse (no meu caso que utilizo a IDE da hmg3.4.3/MinGW) correspondem ao número de linhas do browse.
O letodb(f) vai armazenar outros tantos registros em memória, conforme configuração do parametro CacheRecords. Quando o Operador rolar até o último registro do browse, os registros armazenados em cache vão atualizar novos registros no browser. A troca de registros no browser se torna muito rápida, pois os registros não são lidos no disco, eles já estão em cache.

Muito bom isso.
MINIGUI + HARBOUR + BRMAKE + CDX
CLIPPER 5.2E + VISUALLIB 2 + BLINKER
Avatar de usuário

JAIR RANGEL
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 177
Data de registro: 19 Jul 2005 16:01
Cidade/Estado: RIO DE JANEIRO
Curtiu: 1 vez
Mens.Curtidas: 2 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 11 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro