Codigo SQL duplicando registros

11/05/2003

3

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


Responder

Posts

11/05/2003

Tomcorreia

amigo, para entender a sua syntax é meio complicado, mas tenho certeza que vc esta esquecendo de fazer algum relacionamento.


Responder

12/05/2003

Desander

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:


Responder

12/05/2003

Tathianam

: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;


Responder

13/05/2003

Marbravo

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


Responder

13/05/2003

Adilsond

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


Responder

17/05/2003

Marbravo

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


Responder

18/05/2003

Marbravo

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?


Responder

18/05/2003

Adilsond

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.


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira