Codigo SQL duplicando registros
Meu sistema faz uma consulta na tabela de estoque, só que algums dados estão na tabela de produtos, como fornecedor e familia.
Quando filtro por familia de 1 a 99(campos inteiros) de fornecedor 1 a 99(campos inteiros) o resulta será mais de um registro, então pela logica ele está repetindo o mesmo registro que tem na tabela de estoque e a quantidade de vezes que exibe na tabela de Produtos, veja o codigo:
DMMov.QGen.Close;
DMMov.QGen.Sql.Clear;
DMMov.QGen.Sql.add(´select sum (E.Quant_Total) as Result from Estoque E, Cad_Produtos P´);
DMMov.QGen.Sql.add(´where P.Referencia = E.Referencia and E.Loja =´+Edit5.text);
DMMov.QGen.Sql.add(´and P.Fornecedor >= ´+Combobox1.text+´ and P.Fornecedor <= ´+Edit2.text+´ and P.Familia >= ´+edit4.text+´ and P.Familia <=´+edit3.text);
DMMov.QGen.Open;
É complicado, mas pra quem intendi num é não.
Obrigado
Marbravo@cdlvirtual.com.br
Quando filtro por familia de 1 a 99(campos inteiros) de fornecedor 1 a 99(campos inteiros) o resulta será mais de um registro, então pela logica ele está repetindo o mesmo registro que tem na tabela de estoque e a quantidade de vezes que exibe na tabela de Produtos, veja o codigo:
DMMov.QGen.Close;
DMMov.QGen.Sql.Clear;
DMMov.QGen.Sql.add(´select sum (E.Quant_Total) as Result from Estoque E, Cad_Produtos P´);
DMMov.QGen.Sql.add(´where P.Referencia = E.Referencia and E.Loja =´+Edit5.text);
DMMov.QGen.Sql.add(´and P.Fornecedor >= ´+Combobox1.text+´ and P.Fornecedor <= ´+Edit2.text+´ and P.Familia >= ´+edit4.text+´ and P.Familia <=´+edit3.text);
DMMov.QGen.Open;
É complicado, mas pra quem intendi num é não.
Obrigado
Marbravo@cdlvirtual.com.br
Marbravo
Curtidas 0
Respostas
Tomcorreia
11/05/2003
amigo, para entender a sua syntax é meio complicado, mas tenho certeza que vc esta esquecendo de fazer algum relacionamento.
GOSTEI 0
Desander
11/05/2003
Tente assim:
DMMov.QGen.Close;
DMMov.QGen.Sql.Clear;
DMMov.QGen.Sql.add(´select [b:3c278c44aa]DISTINCT[/b:3c278c44aa]sum (E.Quant_Total) as Result from Estoque E, Cad_Produtos P´);
DMMov.QGen.Sql.add(´where P.Referencia = E.Referencia and E.Loja =´+Edit5.text);
DMMov.QGen.Sql.add(´and P.Fornecedor >= ´+Combobox1.text+´ and P.Fornecedor <= ´+Edit2.text+´ and P.Familia >= ´+edit4.text+´ and P.Familia <=´+edit3.text);
DMMov.QGen.Open;
espero ter ajudado :lol:
DMMov.QGen.Close;
DMMov.QGen.Sql.Clear;
DMMov.QGen.Sql.add(´select [b:3c278c44aa]DISTINCT[/b:3c278c44aa]sum (E.Quant_Total) as Result from Estoque E, Cad_Produtos P´);
DMMov.QGen.Sql.add(´where P.Referencia = E.Referencia and E.Loja =´+Edit5.text);
DMMov.QGen.Sql.add(´and P.Fornecedor >= ´+Combobox1.text+´ and P.Fornecedor <= ´+Edit2.text+´ and P.Familia >= ´+edit4.text+´ and P.Familia <=´+edit3.text);
DMMov.QGen.Open;
espero ter ajudado :lol:
GOSTEI 0
Tathianam
11/05/2003
:idea: Faltou um detalhe:
DMMov.QGen.Close;
DMMov.QGen.Sql.Clear;
DMMov.QGen.Sql.add(´select sum (E.Quant_Total) as Result from Estoque E [b:7df2f209b3] INNER JOIN [/b:7df2f209b3] Cad_Produtos P [b:7df2f209b3] ON E.CODPRO = P.CODPRO [/b:7df2f209b3]´);
DMMov.QGen.Sql.add(´where P.Referencia = E.Referencia and E.Loja =´+Edit5.text);
DMMov.QGen.Sql.add(´and P.Fornecedor >= ´+Combobox1.text+´ and P.Fornecedor <= ´+Edit2.text+´ and P.Familia >= ´+edit4.text+´ and P.Familia <=´+edit3.text);
DMMov.QGen.Open;
DMMov.QGen.Close;
DMMov.QGen.Sql.Clear;
DMMov.QGen.Sql.add(´select sum (E.Quant_Total) as Result from Estoque E [b:7df2f209b3] INNER JOIN [/b:7df2f209b3] Cad_Produtos P [b:7df2f209b3] ON E.CODPRO = P.CODPRO [/b:7df2f209b3]´);
DMMov.QGen.Sql.add(´where P.Referencia = E.Referencia and E.Loja =´+Edit5.text);
DMMov.QGen.Sql.add(´and P.Fornecedor >= ´+Combobox1.text+´ and P.Fornecedor <= ´+Edit2.text+´ and P.Familia >= ´+edit4.text+´ and P.Familia <=´+edit3.text);
DMMov.QGen.Open;
GOSTEI 0
Marbravo
11/05/2003
As soluções dadas até agora resolvem quando ira exibir um campo em um dbgrid ou algo parecido, sendo que quando usso uma função agregada não resolve.
Quando coloco:
select [b:f552218d4e]DISTINCT[/b:f552218d4e] sum(E.Quant_Total) as Result from Estoque E, Cad_Produtos P where E.Referencia = P.Referencia and loja = 1(campo inteiro)
Ele retorna como antes sem nenhuma alteração. Se coloco o distinct dentro dos parenteses ele mostra errado, pois ele não compara a referencia e sim as quantidades.
quando Coloco:
select sum(E.Quant_Total) as Result from Estoque E [b:f552218d4e]INNER JOIN[/b:f552218d4e] Cad_Produtos P [b:f552218d4e]ON[/b:f552218d4e] E.Referencia = P.Referencia and loja = 1(campo inteiro)
Ele retorna como antes sem nenhuma alteração.
Espero que vcs tenham uma solução ou me expliquem melhor, apesar de eu ja ter tentado de tudo com estás dicas.
Obrigado :)
Marbravo@cdlvirtual.com.br
Quando coloco:
select [b:f552218d4e]DISTINCT[/b:f552218d4e] sum(E.Quant_Total) as Result from Estoque E, Cad_Produtos P where E.Referencia = P.Referencia and loja = 1(campo inteiro)
Ele retorna como antes sem nenhuma alteração. Se coloco o distinct dentro dos parenteses ele mostra errado, pois ele não compara a referencia e sim as quantidades.
quando Coloco:
select sum(E.Quant_Total) as Result from Estoque E [b:f552218d4e]INNER JOIN[/b:f552218d4e] Cad_Produtos P [b:f552218d4e]ON[/b:f552218d4e] E.Referencia = P.Referencia and loja = 1(campo inteiro)
Ele retorna como antes sem nenhuma alteração.
Espero que vcs tenham uma solução ou me expliquem melhor, apesar de eu ja ter tentado de tudo com estás dicas.
Obrigado :)
Marbravo@cdlvirtual.com.br
GOSTEI 0
Adilsond
11/05/2003
Não se esqueça que Sum(null) = null
select sum(E.Quant_Total) as Result
from Estoque E,
Cad_Produtos P
where E.Referencia = P.Referencia
and loja = 1
and E.Quant_Total is not null
select sum(E.Quant_Total) as Result
from Estoque E,
Cad_Produtos P
where E.Referencia = P.Referencia
and loja = 1
and E.Quant_Total is not null
GOSTEI 0
Marbravo
11/05/2003
O problema não é que o resultado é nulo. O problema é que quando executa o codigo o resultado quase duplica, nunca mostra menos sempre a mais.
Tá dificil!!!
valeu
marbravo@cdlvirtual.com.br
Tá dificil!!!
valeu
marbravo@cdlvirtual.com.br
GOSTEI 0
Marbravo
11/05/2003
O problema não é que o resultado é nulo. O problema é que quando executa o codigo o resultado quase duplica, nunca mostra menos sempre a mais.
Tá dificil!!!
valeu
marbravo@cdlvirtual.com.br
Será que ninguem sabe qual é o problema?
GOSTEI 0
Adilsond
11/05/2003
Que tal voce postar a descrição de suas tabelas Estoque e Cad_produtos. Só assim poderemos responder corretamente sua dúvida, pois provavelmente voce está esquecendo de algum relacionamento.
GOSTEI 0