Fórum Sql Só retorna um quot;?quot;....tenho que configurar algo #334933
19/12/2006
0
estou com o seguinte problema, tenho esse código sql:
SELECT G.*, (SELECT COUNT(ID_PRODUTO)FROM PRODUTOS P WHERE P.ID_GRUPO = G.ID_GRUPO) AS PRODUTOS, (SELECT SUM(QTDE) FROM PRODUTOS P WHERE P.ID_GRUPO = G.ID_GRUPO) AS QTDE_ESTOQUE FROM GRUPOS G WHERE G.ID_GRUPO=:CODGRUPO
o código está certo, o unico detalhe é que na linha:
(SELECT SUM(QTDE) FROM PRODUTOS P WHERE P.ID_GRUPO = G.ID_GRUPO) AS QTDE_ESTOQUE
quando em tempo de execução ele retorna apenas um ´?´ (ponto de interrogação). executei esse mesmo sql direto no interbase e ele retorna um valor inteiro corretamente.
Será que tenho que configurar algo no delphi para funcionar? utilizo D6 e DBXpress...
qualquer Sugestão é bem vinda.
agradeço desde já... :P
Daniel Martins
Curtir tópico
+ 0Posts
20/12/2006
Daniel Martins
Gostei + 0
20/12/2006
Emerson Nascimento
Gostei + 0
20/12/2006
Macario
Qual SGBD você usa?
Qual a versão e o driver de acesso que você faz uso?
Tive problemas usando D6+dbExpress+driver CoreLab(2.50.5)+MSSQL2000
Que foi solucionado migrando para D7+dbExpress+driver Corelab(3.0.17)+MSSQL2000/2005
Pode ser limitação do dbexpress para o subselect que voce usa.
Gostei + 0
20/12/2006
Daniel Martins
eu tenho uma tabela PRODUTOS e uma tabela GRUPOS, com relacionamento 1 pra 1.
eu queria buscar o grupo e informar ao usuário quantos produtos DIFERENTES estão relacionados ao grupo em questão. Isso eu consegui fazer sem problemas com o Subselect a sequir:
(SELECT COUNT(ID_PRODUTO)FROM PRODUTOS P WHERE P.ID_GRUPO = G.ID_GRUPO) AS PRODUTOS
depois eu preciso mostrar para o usuário o [color=red:9db4b68632]total de produtos em estoque[/color:9db4b68632],ou seja, Somar as quantidades dos produtos relacionados ao grupo em questão.
AS PRODUTOS E AS QTDE_ESTOQUE não são campos persistentes.
Utilizo interbase 6 e delphi 6, mas não sei a versão do driver...
pode existir uma maneira melhor de fazer isso, q talvez eu não sei. alguem tem uma sugestão?
Gostei + 0
20/12/2006
Emerson Nascimento
SELECT G.ID_GRUPO, COUNT(P.ID_PRODUTO) PRODUTOS, SUM(P.QTDE) QTDE_ESTOQUE FROM GRUPOS G LEFT JOIN PRODUTOS P ON (P.ID_GRUPO = G.ID_GRUPO) GROUP BY G.ID_GRUPO
Gostei + 0
22/12/2006
Daniel Martins
daí eu nao preciso colocar o sql na query, o prório IB executa um SP e coloca o valor no campo da tabela, dpois o programa só busca os valores;..
tem como?
Gostei + 0
22/12/2006
Emerson Nascimento
create procedure Grupo_Produtos returns ( ID_Grupo integer, [lista de campos da tabela grupo], Qtd_Produtos integer, Qtd_Estoque float ) as begin for select ID_Grupo, [lista de campos da tabela grupo] from Grupos into :ID_Grupo, [lista de parâmetros de saída criada em "returns"] do begin select count(ID_PRODUTO), sum(QTDE) from Produtos where ID_GRUPO = :ID_Grupo into :QtdProdutos, :QtdEstoque suspend; end end
para chamar é só fazer
select * from Grupo_Produtos
ou
execute procedure Grupo_Produtos
Gostei + 0
22/12/2006
Daniel Martins
CREATE PROCEDURE GRUPO_PRODUTOS RETURNS ( ID_GRUPOINTEGER, DESCRICAOVARCHAR(40), QTDE_MINIMAINTEGER, OBSBLOB, QTDE_PRODUTOS INTEGER, QTDE_ESTOQUE FLOAT ) AS BEGIN FOR SELECT ID_GRUPO,DESCRICAO, QTDE_MINIMA, OBS FROM GRUPOS INTO :ID_GRUPO,:DESCRICAO,:QTDE_MINIMA,:OBS DO BEGIN SELECT COUNT(ID_PRODUTO), SUM(QTDE) FROM PRODUTOS WHERE ID_GRUPO = :ID_GRUPO INTO :QTDE_PRODUTOS, :QTDE_ESTOQUE SUSPEND; END END!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)