• 0
Sign in to follow this  
Renatosky

Sql no delphi

Question

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;

Share this post


Link to post
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Renatosky, qual seria o objetivo do DISTINCT?

O fato de utilizar o GROUP BY, já vai lhe gerar resultados distintos para cada linha.

Share this post


Link to post
Share on other sites
  • 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..

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
  • 0

isso Otimo.. eu estava usando o For mas assim funcioniou perfeitamente..

já no caso do count com o distinct não funciona mesmo.;..

obrigado.

Share this post


Link to post
Share on other 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;

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this