Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 4115 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Olá amigos bom dia...

To precisando de um help :)

Tenho uma consulta aqui (vou exemplificar): select * from PRODUTOS where LOJA=1 e tenho um retorno de mais ou menos 10 mil registros de um total de quase 30 mil.

Preciso fazer uma consulta da consulta... por exemplo: select (do resultado anterior) where preco > 50.00; afim de se ter um melhor em cima apenas do cache.

O locate acaba sendo inviável pelo fato de apenas posicionar no primeiro registro do filtro.

É possível ? Utilizo o Zeos 6.6 e Mysql.

 

Obrigado.

 

Sérgio

Equipe ACBr Sérgio Assunção
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

[email protected]

Postado

Acho que o simples fato de uma Query retornar 30.000 registros já está errado... Isso irá sobrecarregar muito o seu BD...

Olá Daniel... isso só foi um exemplo. Realmente, pensando no desempenho que estou tentando fazer uma consulta já com dados que estarão em cache. Talvez espelhar uma query ... não sei exatamente a solução.

 

Obrigado.

 

Sérgio

Equipe ACBr Sérgio Assunção
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

[email protected]

  • Moderadores
Postado

Basta vc ir concatenando seu filtro e executando a query novamente.

 

Ex:

 

select * from PRODUTOS where LOJA=1

 

select * from PRODUTOS where LOJA=1 and DESCRICAO like '%NOME%'

 

select * from PRODUTOS where LOJA=1 and DESCRICAO like '%NOME%' and PRECO > 50

 

select * from PRODUTOS where LOJA=1 and DESCRICAO like '%NOME%' and PRECO > 50 and ESTOQUE > 0

 

...

djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.xpos.com.br
  • Consultores
Postado

    Sinceramente, eu não entendi os requisitos do seu problema. Não entendi se você quer localizar um registro que já foi selecionado e exibido (locate). Se quer filtrar os registros (Where). Se quer reduzir o número de registros/linhas retornadas pelo select (ROWS). Se quer fazer um select de um select (Select * from Select...)

    Se vai mostrar isso na tela ou vai fazer um cálculo...

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado

    Sinceramente, eu não entendi os requisitos do seu problema. Não entendi se você quer localizar um registro que já foi selecionado e exibido (locate). Se quer filtrar os registros (Where). Se quer reduzir o número de registros/linhas retornadas pelo select (ROWS). Se quer fazer um select de um select (Select * from Select...)

    Se vai mostrar isso na tela ou vai fazer um cálculo...

Bom dia amigo...

A minha necessidade é a seguinte ... acho que o termo seria "espelhar uma query".

Vou realizar uma consulta e terei um retorno de X registros. Ai gostaria de realizar uma segunda consulta em cima dos dados que ja estão em cache (os x registros) e teria y registros. Caso essa segunda consulta não retornasse nada, a grid voltaria a exibir a primeira consulta (os x registros iniciais).

Eu fiz aqui uma "gambiarra" da seguinte forma:

Faço o primeiro sql e jogo os dados em um clientdataset, e passo a trabalhar com o clientdataset da segunda consulta em diante.

Não sei se fui claro :/

 

De qualquer forma eu agradeço a atenção de todos vocês.

 

Att,

 

Sérgio

Equipe ACBr Sérgio Assunção
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

[email protected]

  • Consultores
Postado

E por que você não faz a segunda consulta de uma vez e se ela não retornar nada você faz a primeira?

Isso diminuiria os dados trafegando entre o servidor e a máquina cliente, seria um retorno mais rápido e provavelmente atingiria seu objetivo.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado

E por que você não faz a segunda consulta de uma vez e se ela não retornar nada você faz a primeira?

Isso diminuiria os dados trafegando entre o servidor e a máquina cliente, seria um retorno mais rápido e provavelmente atingiria seu objetivo.

Eu abro o form produtos e já faço uma consulta no servidor: "select * from PRODUTOS where LOJA=x" ... Ok, tranquilo.

Já com o form aberto eu vou ter a necessidade de mostrar os produtos de uma determinada cor. Nessa etapa que eu já não queria ter que buscar novamente no servidor Ex: "select * from PRODUTOS where LOJA=x and COR=z". Gostaria de trabalhar em cima das informações que estão em cache, ou seja, da loja x.

 

Sérgio

Equipe ACBr Sérgio Assunção
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

[email protected]

  • Consultores
Postado

Se você já fez o select e agora vai trabalhar com os dados você não precisa fazer outro select.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado

Boa noite.

 

Primeiro eu acho que você deveria repensar seu método de pesquisa de produtos.

 

Qual o sentido de "pegar"  todos os produtos e depois aplicar um outro "filtro" no resultado? 

 

Raramente o usuário precisa de todos os registros. Salvo em relatórios e etc.

 

O André te deu uma solução que é incluir o campo de pesquisa no próprio select.

 

Caso você queira manter essa estrutura, pode ser utilizado o Filter/Filtered do ClientDataset.

 

Também pode, em vez de informar o filtro na property Filter do ClientDataSet, pode ser utizando o evento OnFilterRecord. que te dá uma opção muito grande de filtro.

 

Ateciosamente.

------------------------------------------------

Jéter Rabelo Ferreira
Campestre/MG

  • Este tópico foi criado há 4115 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.