Ir para conteúdo
Fórum Script Brasil
  • 0

Pesquisa Avançada De Produtos De uma Ùnica Tabela?


valSistemasDelphi

Pergunta

Olá gostaria de ajuda com um tipo de cadastro que estou desenvolvendo em meu projeto. Muitos sistemas tem somente uma tela onde são cadastrados vários tipos de produtos, o que os diferenciam e o tipo e o Departamento que eles se encontram. Sei que todos eles são armazenados em uma Única tabela como se fosse uma Matriz. Se eu fosse por exemplo editar um produto especifico com seu nome por exemplo do departamento de Refrigerantes, escreveria o nome e apareceria o produto. Mais eu gostaria que quando eu escrevesse o nome do produto aparecesse todos da família vamos dizer assim. Tipo assim Pesquisar Coca-Cola 2l, ai aparecesse só os produtos da Coca, tipo 1,5,2,5 e assim por diante. Desculpe se minha dúvida ficou parecendo um texto, mais foi a forma que tive para explicar. 

Link para o comentário
Compartilhar em outros sites

23 respostass a esta questão

Posts Recomendados

  • 0

Eu não sei como esta a estrutura da(s) tabela(s). 

Você diz que queria que aparece todos os produtos da família... você esta se referindo a todos os produtos da marca Coca Cola?

Cada produto (p.ex: Coca Cola 2l) cadastrado é um registro na tabela produto? ou você tem mais de uma tabela para controlar as embalagens (p.ex: tabela produto, embalagem)?

Mostre como esta a estrutura da(s) tabela(s) envolvida(s) para que possamos te ajudar.

Link para o comentário
Compartilhar em outros sites

  • 0

Essa dúvida que postei, visualizei em um sistema de Mercado muito eficiente e conhecido. Por isso propus implementar esta mesma ideia no meu Sistema. No sistema(Mercado), e feita todo o cadastro de produtos em uma tela e e gerado um Código para cada produto cadastrado, o que diferencia do outro e a categoria e o setor, e a pesquisa e feita pela "Descrição do produto". Ai o sistema filtra e aparece somente os produtos da Sua "Família" Eu Quero implementar isso no meu sistema, Só que ainda não sei Como?

Você diz que queria que aparece todos os produtos da família... você esta se referindo a todos os produtos da marca Coca Cola? Sim, todos.

 

 

Cada produto (p.ex: Coca Cola 2l) cadastrado é um registro na tabela produto? ou você tem mais de uma tabela para controlar as embalagens (p.ex: tabela produto, embalagem)? Por enquanto criei somente a tabela onde são armazenados os produtos. isso Cada produto possui um registro diferente.

 

Link para o comentário
Compartilhar em outros sites

  • 0

Verifique se é isso que você quer:

select *
from produto
where descrição_produto CONTAINING :descricao

Ao pesquisar informe coca cola no parâmetro, com isso retorna todos os produtos que contenha a palavra coca cola

 

Boa Sorte!

Editado por pestana.
Link para o comentário
Compartilhar em outros sites

  • 0

Tive uma ideia! tem como eu fazer essa pesquisa utilizando um ComboBox.. Ai eu faço a pesquisa pelas categorias cadastradas do produto. Não utilizo nenhuma função SQL. Gosto de usar esses componentes.. Datasouce, Ibtable, Ibtrabsaction.Ibdatabase.. Tem como passar esta Lógica do seu Código para a minha necessidade, sabendo que uso esses componentes? Desde já obrigado..

Editado por valSistemasDelphi
Link para o comentário
Compartilhar em outros sites

  • 0

Faz tanto tempo que eu não uso os componentes TTable, mas vou tentar de ajudar (me desculpe se houver algum erro)!

Depois de você preencher o combobox com as opções e efetuado todas as ligações dos componentes de acesso a dados, faça o seguinte:

IBTable.Filter := 'descricao_produto CONTAINING '+QuotedStr(ComboBox.Items.Strings[ComboBox.ItemIndex]);
IBTable.Filtered := true;
IBTable.Open;

 

Qualquer coisa volte a postar,

Boa sorte!

Editado por pestana.
Link para o comentário
Compartilhar em outros sites

  • 0

Nossa muito Bom PEstana deu Certinho Do jeito que estava querendo. Só que eu tou querendo que quando eu fosse criando uma nova categoria fosse salvando automaticamente no ComboBox, tem como, ou se eu uso outro componente mais especifico? Tem como eu fazer uma pesquisa pelo Edit sem precisar apertar botão para pesquisar?

Editado por valSistemasDelphi
Link para o comentário
Compartilhar em outros sites

  • 0
10 horas atrás, valSistemasDelphi disse:

... quando eu fosse criando uma nova categoria fosse salvando automaticamente no ComboBox ...

Como assim criando uma nova categoria, eu não entendi? Você esta querendo gravar o registro no banco e depois incluir a categoria no combobox, é isso?

 

10 horas atrás, valSistemasDelphi disse:

... Tem como eu fazer uma pesquisa pelo Edit sem precisar apertar botão para pesquisar?

Tem sim é só colocar o código que realiza a pesquisa no evento OnChange ou OnExit do componente TEdit.

O evento OnChange dispara a cada tecla pressionada no teclado e o evento OnExit quando se perde o foco, ou seja, quando sai do componente.

 

Qualquer coisa volte a postar,

boa sorte!

 

Editado por pestana.
Link para o comentário
Compartilhar em outros sites

  • 0

Desculpe pela forma que me expressei. Deixa eu explicar Quero cadastrar todos os produtos e dividir todos por "categorias", e fazer a pesquisa pela "categoria cadastrada".  Tipo Categoria= Coca-Cola, ai ele mostra na tabela Só os produtos da Coca-Cola.

Fiz esta pergunta, quando eu fosse criando uma nova categoria fosse salvando automaticamente no ComboBox, ou em outro componente que der para fazer isso, porque visualizei em um sistema de mercado, parecendo um ComboBox ou algo bem parecido. Será que dar para fazer desta forma, Obrigado desde já pelas Respostas..

Link para o comentário
Compartilhar em outros sites

  • 0

Supondo que você tem este campo de categoria na sua tabela de produto, para preencher o combobox com as categorias é só você fazer isso:

combobox.items.add(IBtable.FieldByName('campoCategoria').asString);

Depois você filtra os dados:

IBTable.Filter := 'campoCategoria CONTAINING '+QuotedStr(ComboBox.Items.Strings[ComboBox.ItemIndex]);
IBTable.Filtered := true;
IBTable.Open;


Eu acho que é isso, mas qualquer coisa volte a postar,
Boa sorte!
 

Link para o comentário
Compartilhar em outros sites

  • 0

quando eu fosse criando uma nova categoria fosse salvando automaticamente no ComboBox, ou em outro componente que der para fazer isso

use o componente  DBLookupComboBox1 da paleta DataControls

na propriedade ListSource coloque o DataSource

na propriedade ListField coloque o campo descricao_produto

na propriedade KeyField coloque o seu campo chave ( que pode ser o mesmo do ListFields)

OBS: o DBLookupComboBox vai conter os nomes de todos os seus produtos, mas isso pode ser um problema se forem muitos. ( se ponha no lugar do usuário )  

abraço

 

Link para o comentário
Compartilhar em outros sites

  • 0
59 minutos atrás, valSistemasDelphi disse:

Obrigado por responder, infelizmente não deu certo, a parte de preencher o ComboBox. Tentei via Ochange, E Onclick.

 

Aquele só foi um exemplo de como preencher o combobox como os dados do Field do IBTable.

Você tem que incluir este código aonde houver a sua necessidade, por exemplo depois de pesquisar ou incluir um registro na tabela do banco.

Mas tente fazer como o Jhonas citou que é mais fácil.

 

Qualquer coisa volte a postar,

boa sorte!

 

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado por responder. Fiz igual o jhonas comentou e deu certo, esta fazendo a pesquisa somente da categoria selecionada, só, que some todos as outras categorias logo a apos a pesquisa, e fica somente da pesquisa que escolhi da categoria no DbLookupComboBox, tem como resolver este empasse.

Estou usando este código para Filtrar os "Dados"

procedure TForm5.DBLookupComboBox1Click(Sender: TObject);
begin

IBTable1.Filter := ' CATEGORIA CONTAINING '+QuotedStr(DBLookupCombobox1.Text);
IBTable1.Filtered := true;
IBTable1.Open;
Obs: Este código que consegui fazer ele rodar sem Problemas!!

Link para o comentário
Compartilhar em outros sites

  • 0

Não Pestana, e o contrario eu quero que ele filtre Só a categoria que eu selecionar no DBlookupComBox. Tipo > Coca-COLA > ai vem a familia> Fanta L, Fanta Uva, Sprite, Kuat e Coca. E as outras categorias tipo sumessem, Mais voltassem todas as categorias denovo, e o que está acontecendo e que as outras somem, Não entendi até agora porque. Coloquei essas Imagens porque ilustram bem a minha necessidade!!

20161030_094745.jpg

Aqui e um Exemplo da pesquisa por categoria..

 

20161030_094819.jpg

Aqui São todas as Categorias que eu vou cadastrando, na tela de Cadastro de produtos!!

20161030_094836.jpg

Aqui já esta sendo feito o filtro por Categoria. So que no meu caso quando clico no DbLookupComboBox para escolher outra categoria não aparece as Outras Categorias Somem Todas. Desculpe se minha pergunta ficou muito extensa, mais foi a forma que achei de explicar. 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Como voce colocou um código para cada produto, o campo referencia, ou categoria do produto deve conter o mesmo nome.

exemplo: descrição do produto -  categoria do produto

coca cola 1,5 L - refrigerante

coca cola 2 L - refrigerante

Fanta L - refrigerante

Fanta Uva - refrigerante

Sprite - refrigerante

Kuat - refrigerante

Cookies - bolachas

maizena - bolachas

cream crakers - bolachas

mairilan - bolachas

se voce filtrar pela familia, que seria a categoria do produto ... então quando voce escolher refrigerante vai trazer todos eles, mas se voce escolher filtrar pela descrição do produto ( coca cola ) só vai trazer os registros com esse nome

quando clico no DbLookupComboBox para escolher outra categoria não aparece as Outras Categorias Somem Todas.

voce tem que desativar o filtro antes de fazer outra escolha

abraço

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

ValSistemasDelphi, você pode ter duas IBTable. 
IBTable1 contem os dados da pesquisa, p.ex: os dados que estão na tela (a imagem que você postou).
IBTable2 contem somente as categorias exibido no DBLookupComboBox.

Porque eu acho que você esta usando uma IBTable para todos (amostrar os dados da pesquisa na tela e no DBLookupComboBox) por isso que não funciona, tem que separar os registros que foram filtrados através da pesquisa (se utiliza IBTable1) e os dados da categoria exibido no (DBLookupComboBox) se utiliza o IBTable2, com isso um não interfere no outro. Depois que você escolheu uma categoria no DBLookupComboBox você faz a pesquisa, com isso vai retornar todos os registros aonde a categoria seja igual a categoria selecionado no DBLookupComboBox e no DBLookupComboBox continua aparecendo todas as categorias.


Não sei se ficou confuso, qualquer coisa eu explico novamente!
 

Um outro ponto seria você criar uma tabela de categoria e relacionar com a tabela produto e fazer o relacionamento de um para muitos no sentido de categoria para produtos.

Categoria {id_categoria, descricao, ...} 1 - N Produto {id_produto, descricao, id_categoria ...}

id_categoria da tabela produto referência o campo id_categoria da tabela categoria. id_categoria da tabela produto - chave estrangeira.

 

Boa Sorte!

 

Editado por pestana.
Link para o comentário
Compartilhar em outros sites

  • 0

Muito Obrigado por responder Pestana, Acabei ficando um pouco confuso, você poderia colocar sua ideia atraves de algum Código especifico!! Nessa parte da tabela de categorias, já tenho um form para isso só falta conectar ao banco de Dados..

Editado por valSistemasDelphi
Link para o comentário
Compartilhar em outros sites

  • 0

Tendo uma tabela de produto e outra de categoria em que ambos estão relacionados, faça o seguinte:

No IBTable1 você configura para exibir os registros de produto.

No IBTable2 você congigura para que amostre todas as categorias.

No DBLookupComboBox você configura ListSource, ListField e KeyField.

No botão de pesquisa você faz isso:

IBTable1.Filter := 'codigoCategoria = IBTable2.FieldByName('codigoCategoria').AsString);
IBTable1.Filtered := true;
IBTable1.Open;

 

Eu fiz um exemplo utilizando o banco employee do firebird, como eu posso enviar pra você?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...