Ir para conteúdo
Fórum Script Brasil
  • 0

Sql no delphi


Renatosky

Pergunta

Ola amigos, preciso contar quantos itens este select esta listando, mas parece q o count não funciona com o distinct, já fiz de tudo. Se alguém tiver alguma solução.. O banco q estou usando é o oracle 9i. valeu.

SALDO1.Close;

SALDO1.SQL.Clear;

SALDO1.SQL.ADD('Select DISTINCT A.CODPROMAT,A.DESPROMAT,Sum(B.QTDVEN) AS TOTAL from');

SALDO1.SQL.ADD('CADPROMAT A,DETNOTFISVEN B,MESFISVEN C,MESROMCAR D');

SALDO1.SQL.ADD('where C.CODEMP=B.CODEMP AND C.CODEST=B.CODEST AND C.NUMNOTFIS=B.NUMNOTFIS AND');

SALDO1.SQL.ADD('D.CODEMP=C.CODEMP AND D.CODEST=C.CODEST AND D.NUMROMCAR=C.NUMROMCAR AND');

SALDO1.SQL.ADD('B.CODCLI=C.CODCLI AND B.CODPROMAT=A.CODPROMAT AND D.DATSAI='+#39+'31/12/9999'+#39+'AND');

SALDO1.SQL.ADD('C.INDFATMAN='+#39+'N'+#39+'AND C.INDIMP='+#39+'S'+#39+'AND C.INDNOTSAI='+#39+'S'+#39+'AND');

SALDO1.SQL.ADD('C.DATEMI<'+#39+maskedit1.text+#39+'AND C.INDRET='+#39+'N'+#39+'AND C.NUMNOTSAI='+#39+'0'+#39+'AND');

SALDO1.SQL.ADD('C.INDCAN='+#39+'N'+#39);

SALDO1.SQL.ADD('GROUP BY A.CODPROMAT,A.DESPROMAT,A.INDMARPRO');

SALDO1.SQL.ADD('HAVING A.INDMARPRO='+#39+'S'+#39);

SALDO1.Open;

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

O distinct nesta função é utilizado p/ resumir os resultados, sem ele os resultados seriam o triplo, e o fato de ter q contar os campos é p/ eu gravar em outro banco de dados tudo q foi encontrado dentro desta select, fiz um for e preciso saber quando parar por isso tenho q contar qtos registros foram encontrados.

atenciosamente,

RSA..

Link para o comentário
Compartilhar em outros sites

  • 0
..., fiz um for e preciso saber quando parar por isso tenho q contar qtos registros foram encontrados. ...

Oi, 'Renatosky'!

Em vez de for por que não usar repeat until ou while. Não seriam mais práticos?

Link para o comentário
Compartilhar em outros sites

  • 0
..., fiz um for e preciso saber quando parar por isso tenho q contar qtos registros foram encontrados. ...

Oi, 'Renatosky'!

Em vez de for por que não usar repeat until ou while. Não seriam mais práticos?

Realmente Denis Courcy, seria a opção mais adequada.

Renatosky, seguindo a sugestão do colega, seu código ficaria mais ou menos assim:

// seu código para montar o SQL estaria aqui (seu post inicial)
  ...
  SALDO1.Open;
  while not SALDO1.OEF do
  begin
    // seu processamento vai aqui
    ....
    SALDO1.Next;
  end;
  SALDO1.Close;
...
end;

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

usa

qry.recordcount ^^

obs: Porque não fazer:

qry.sql.text :=

'Select DISTINCT A.CODPROMAT,A.DESPROMAT,Sum(B.QTDVEN) AS TOTAL from'+

CADPROMAT A,DETNOTFISVEN B,MESFISVEN C,MESROMCAR D'+

'where C.CODEMP=B.CODEMP AND C.CODEST=B.CODEST AND C.NUMNOTFIS=B.NUMNOTFIS AND'+

'D.CODEMP=C.CODEMP AND D.CODEST=C.CODEST AND D.NUMROMCAR=C.NUMROMCAR AND'+....

Mesmo assim, não sei eu o que você quer fazer... Está muito grande. o maior que já utilizei foi:

begin
      lvDt  := copy(fDtBD(dtPerigo.Date), 3, 6);
      lvAux := 'A.' + cntCacelado + 'AND MID(A.dt_nasc, 1, 4) <= "' +
         fRetDtNasc(pIdade1)    + '" AND MID(A.dt_nasc, 1, 4) >= "' +
         fRetDtNasc(pIdade2)    + '"';
      lvSql := 'SELECT B.* '+
               'FROM '+ cntTBCrmAss + ' AS A LEFT JOIN ' +  cntTBCrmCtf +
               ' AS B ON (A.cd_associado = MID(B.id_ctf, 7, 9) AND '    +
               'MID(B.id_ctf, 1, 6) >= "'+lvDt+'")' +
               ' WHERE ' + lvAux + ' AND A.fl_cancelado = 0 AND B.id_ctf IS Null';
      rOpenRSQuery  (lvSql, 'qry');
      lvAll := IntToStr(fQrCount('qry'));
      pNum .Caption := lvAll;
      rAuxTotSoc();
      pPerc.Caption := fCalcPercentStr(lvAll, IntToStr(lvATot));
      rCloseRSQuery('qry');
   end;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...