Fórum Query esta duplicando valores #385311
31/08/2010
0
O código esta no evento change, conforme digita ele procura.
procedure Tfrmlocalizarproduto.EdtlocalizaChange(Sender: TObject);begin with DataModule1.ZQuerylocalizaproduto do begin DataModule1.ZQuerylocalizaproduto.Close; DataModule1.ZQuerylocalizaproduto.SQL.Clear; DataModule1.ZQuerylocalizaproduto.SQL.Add('SELECT produtos.idproduto,produto_grade.idproduto,produto_grade.descricao,produto_grade.codbar '+ 'FROM produtos,produto_grade where produtos.idproduto=produto_grade.idproduto '+'and produto_grade.descricao like ''%'+edtlocaliza.Text+ '%''or produto_grade.idproduto like ''%'+ edtlocaliza.Text + '%''or produto_grade.codbar like ''%'+ edtlocaliza.Text + '%''group by produtos.idproduto,produto_grade.idproduto,' + 'produto_grade.descricao,produto_grade.codbar'); DataModule1.ZQuerylocalizaproduto.Open;
if IsEmpty then // aqui vc faz a verificação se a tabela for vazia begin showmessage('Nome não encontrado !!!'); DataModule1.ZQuerylocalizaproduto.Close; Abort; end; // fim do if
end; // fim do with
end;Quando vc usa apenas uma condição de procura (edtlocaliza.Text), ele funciona perfeitamente, mas da maneira que esta ele funciona, só que quando vc apaga o valor, ele retorna várias duplicados...
Maiquelnet
Curtir tópico
+ 0Posts
31/08/2010
Pietro Braga
Coloque nesse mesmo evento antes desse código:
if (localiza.text = '' ) then Abort else begin with DataModule1.ZQuerylocalizaproduto do begin //Esse é o começo do seu código. ... end
agora veja no que me referi quandi disse quew estava um pouco confuso.
se você ja está usando
with DataModule1.ZQuerylocalizaproduto do begin
então nas próximas linhas basta um simples:
Close; // só não tenho certeza quanto ao Close
SQL.Clear;
SQL.Add(........................................)
Open;
Gostei + 0
31/08/2010
Pietro Braga
[code]
if (edtlocaliza.text = '' ) then Abort
else
begin
with DataModule1.ZQuerylocalizaproduto do begin //Esse é o começo do seu código.
...
end; // Fim do With
end;
Gostei + 0
31/08/2010
Maiquelnet
if (edtlocaliza.text = '' ) then Abort end;
Nessa parte ele faz uma consulta de 3 campos nas tabelas produto e produto grade. Seriam a Descricao, o IDproduto e o CódBarras, se for digitado um valor cadastrados em qualquer um destes, ele buscaria no query e mostraria.
Só que como ele tava duplicando eu coloquei esta parte:
if IsEmpty then // aqui vc faz a verificação se a tabela for vazia begin showmessage('Nome não encontrado !!!'); DataModule1.ZQuerylocalizaproduto.Close; Abort; end;pq pensei que ele estivesse duplicando, quando eu limpasse ou não fosse encontrado o campo edtlocaliza ele limparia a query e apresentaria os valores iniciais... fiz isso pra tentar evitar a duplicação dos valores... mas mesmo assim ele continua duplicando...
Dae coloquei um witch no inicio apenas para ele ficar no loop.
Na verdade o que precisaria seria que ele apresentasse os valores da pesquisa sem duplicá-los...não sei se tem algum função própria para isso ou atraves de algum loop eu consiga...só sei q tentei várias mutretas e nenhuma deu certo...
Gostei + 0
01/09/2010
Pietro Braga
else
begin
with DataModule1.ZQuerylocalizaproduto do begin //Esse é o começo do seu código.
...
end; // Fim do With
end;
Gostei + 0
01/09/2010
Maiquelnet
else
begin
with DataModule1.ZQuerylocalizaproduto do begin //Esse é o começo do seu código.
...
end; // Fim do With
end;
meu bruxo, funcionou!!!só alterei alguma coisa... mas a idéia funcionou, ou seja, vc limpa a query antes de testar e depois vc faz a busca... da maneira q eu tava fazendo, depois de entrar no with, ele nunca conseguia limpar...ficou assim:
if (edtlocaliza.text = '' ) then begin DataModule1.ZQuerylocalizaproduto.close; DataModule1.ZQuerylocalizaproduto.SQL.Clear; DataModule1.ZQuerylocalizaproduto.SQL.Add('SELECT produtos.idproduto,produto_grade.idproduto,produto_grade.descricao,produto_grade.codbar '+ 'FROM produtos,produto_grade where produtos.idproduto=produto_grade.idproduto group by produtos.idproduto,produto_grade.idproduto,' + 'produto_grade.descricao,produto_grade.codbar'); DataModule1.ZQuerylocalizaproduto.Open; end else begin
DataModule1.ZQuerylocalizaproduto.Close; DataModule1.ZQuerylocalizaproduto.SQL.Clear; DataModule1.ZQuerylocalizaproduto.SQL.Add('SELECT produtos.idproduto,produto_grade.idproduto,produto_grade.descricao,produto_grade.codbar '+ 'FROM produtos,produto_grade where produtos.idproduto=produto_grade.idproduto '+'and produto_grade.descricao like ''%'+edtlocaliza.Text+ '%''or produto_grade.idproduto like ''%'+ edtlocaliza.Text + '%''or produto_grade.codbar like ''%'+ edtlocaliza.Text + '%''group by produtos.idproduto,produto_grade.idproduto,' + 'produto_grade.descricao,produto_grade.codbar'); DataModule1.ZQuerylocalizaproduto.Open;assim quando apaga o valor digita do edit ele retorna sem duplicações... resolvendo o problema!!!valew e muito obrigado!!!
e se vc quizer me salvar de outra baita engrisia, da uma olha nesse outro tópico q ainda ta aberto!!https://www.devmedia.com.br/forum/viewtopic.asp?id=384784
valew mesmo!!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)