Codigo SQL duplicando registros

Delphi

11/05/2003

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


Marbravo

Marbravo

Curtidas 0

Respostas

Tomcorreia

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

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:


GOSTEI 0
Tathianam

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;


GOSTEI 0
Marbravo

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


GOSTEI 0
Adilsond

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


GOSTEI 0
Marbravo

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


GOSTEI 0
Marbravo

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

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
POSTAR