Sql Só retorna um quot;?quot;....tenho que configurar algo

Delphi

19/12/2006

olá amigos :D

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

Daniel Martins

Curtidas 0

Respostas

Daniel Martins

Daniel Martins

19/12/2006

eu também acho estranho isso acontecer....


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

19/12/2006

você tem campos persistentes no dataset onde essa instrução é executada?


GOSTEI 0
Macario

Macario

19/12/2006

Olá.

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
Daniel Martins

Daniel Martins

19/12/2006

o esquema é o seguinte...

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
Emerson Nascimento

Emerson Nascimento

19/12/2006

tente com essa instrução:
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
Daniel Martins

Daniel Martins

19/12/2006

Tem como por exemplo eu fazer uma Stored Procedure no IB que faça esse trabalho?

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
Emerson Nascimento

Emerson Nascimento

19/12/2006

tem sim:
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
Daniel Martins

Daniel Martins

19/12/2006

então ele deve ficar assim:
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
POSTAR