Contagem de registros

Delphi

10/08/2011

Boa tarde pessoal,

estou com uma duvida de como
fazer para contar quantos registros tem em uma consulta, só que eu queria contar
dois tipos de resultado

tenho uma tabela +ou- assim

os pedido
atendido
123 123 no prazo
321 321 em atraso

teria que contar
quantos registros tem em atraso e quantos tem no prazo e apresentar em um edit


se alguem puder me ajudar...

desde já agradeço
 
Marcelo Gadani

Marcelo Gadani

Curtidas 0

Respostas

Wilson Junior

Wilson Junior

10/08/2011

Faça um subselect para cada um deles. Qualquer coisa, post aqui o seu AQL que lhe ajudo a fazer.
GOSTEI 0
Marcelo Gadani

Marcelo Gadani

10/08/2011

eu fiz assim select atendido, count(atendido)from apontamento group by atendido   mais não sei como apresentar os resultados entende...   eu queria apresentar os resultados em dois edits   tipo assim       edit1.text := no prazo   edit2.text := em atraso  
GOSTEI 0
Wilson Junior

Wilson Junior

10/08/2011

Vamos por partes:
1 - Você tem o SQL pronto? Se não tem,  especifique aqui os campos da sua tabela e como você quer
2 - Quais componentes do Delphi você está utilizando para executar o SQL? Coloque aqui o seu código.

Aguardo retorno.
GOSTEI 0
Marcelo Gadani

Marcelo Gadani

10/08/2011

este é meu codigo   begin
  with uDMconexao.CDSGrafApont do      begin
        close;
        uDMConexao.CDSGrafApont.commandtext:='select atendido, count(atendido)from apontamento group by atendido';
        FormConsApont.Edit2.text := uDMConexao.CDSGrafApont.FieldByName('atendido').AsString;
        uDMConexao.CDSGrafApont.Open;
     end;
end;     aqui ele esta fazendo a seleção só não sei apresentar o resultado...     to usando query e clientdataset    
GOSTEI 0
Wilson Junior

Wilson Junior

10/08/2011

Tente assim
with uDMconexao.CDSGrafApont do
begin
  Close;
  CommandText:='select atendido, count(atendido) AS ContAtendido from apontamento group by atendido';
  Open;
  FormConsApont.Edit2.Text := FieldByName('Atendido').AsString;
  FormConsApont.Edit3.Text := FieldByName('ContAtendido').AsString;
end;


Espero ter colaborado.
GOSTEI 0
Marcelo Gadani

Marcelo Gadani

10/08/2011

este codigo me retornou assim     edit2 = vazio        edit3 = 0     e eu tenho na tabela os valores que eu queria contar que são     a tabela esta assim   OF         PEDIDO         PRODUTO           ATENDIDO 123        123                PARAFUSO           EM ATRASO 123        123                PARAFUSO           EM ATRASO 123        123                PARAFUSO           NO PRAZO 123        123                PARAFUSO           NO PRAZO     SENDO QUE O SELECT TEM QUE ME RETORNAR   ISSO   ATENDIDO   NO PRAZO = 2 EM ATRASO = 2   E JOGAR ESTE RESULTADO NOS EDITS  
GOSTEI 0
Wilson Junior

Wilson Junior

10/08/2011

Uma maneira de ser feito é assim.
with uDMconexao.CDSGrafApont do
begin
  Close;
  CommandText :=
    ' SELECT' + 
    '   SUM(' + 
    '   CASE Atendido' +
    '       WHEN ' + QuotedStr( 'EM ATRASO' ) + ' THEN 1' +
    '       ELSE 0' + 
    '     END' + 
    '   ) AS Soma_Atraso,' + 
    '   SUM(' + 
    '   CASE Atendido' +
    '       WHEN ' + QuotedStr( 'NO PRAZO' ) + ' THEN 1' +
    '       ELSE 0' + 
    '     END' + 
    '   ) AS Soma_Prazo' + 
    ' FROM' + 
    '   APONTAMENTO';
  Open;
  FormConsApont.Edit2.Text := FieldByName('Soma_Atraso').AsString;
  FormConsApont.Edit3.Text := FieldByName('Soma_Prazo').AsString;
end;


Espero ter colaborado.
GOSTEI 0
Marcelo Gadani

Marcelo Gadani

10/08/2011

Bom dia wilson...   deu certinho o este codigo que vc enviou...   muito obrigado...   vou estudar o codigo que vc enviou...   obrigado e até a próxima...    
GOSTEI 0
Marcelo Gadani

Marcelo Gadani

10/08/2011

Wilson...   outra coisa...   eu consigo pegar uma data assim 20/05/2011 e converter ela pra texto ficaria assim   vinte de maio de dois mil e onze   ou pelo menos capturar só o mês maio?   grato.
GOSTEI 0
Marcelo Gadani

Marcelo Gadani

10/08/2011

Wilson obrigado...   consegui conveter a data por extenso...   agora surgiu uma outra duvida no codigo que vc me enviou...   é possivel no select que vc me enviou incluir para pesquisar entre datas??   se puder me ajudar agradeço muito..    
GOSTEI 0
Wilson Junior

Wilson Junior

10/08/2011

De uma olhada neste link http://www.sql-tutorial.net/SQL-WHERE.asp

Espero ter colaborado.
GOSTEI 0
Marcelo Gadani

Marcelo Gadani

10/08/2011

begin
  Close;
  CommandText :=
    ' SELECT' +
    '   SUM(' +
    '   CASE Atendido' +
    '       WHEN ' + QuotedStr( 'EM ATRASO' ) + ' THEN 1' +
    '       ELSE 0' +
    '     END' +
    '   ) AS Soma_Atraso,' +
    '   SUM(' +
    '   CASE Atendido' +
    '       WHEN ' + QuotedStr( 'NO PRAZO' ) + ' THEN 1' +
    '       ELSE 0' +
    '     END' +
    '   ) AS Soma_Prazo' +
    ' FROM' +
    ' APONTAMENTO' +
    ' and ' +   <---------   inclui esta parte do codigo mais esta dando erro
    ' ENTREGA BETWEEN :data1 and :data2';<--------- inclui esta parte do codigo mais esta dando erro
    uDMConexao.CDSGrafApont.Params.ParamByName('data1').AsDateTime := StrToDate(maskedit1.Text);<--------- inclui esta parte do codigo mais esta dando erro
    uDMConexao.CDSGrafApont.Params.ParamByName('data2').AsDateTime := StrToDate(maskedit2.Text);<--------- inclui esta parte do codigo mais esta dando erro
  Open;
  FormConsApont.Edit2.Text := FieldByName('Soma_Atraso').AsString;
  FormConsApont.Edit3.Text := FieldByName('Soma_Prazo').AsString;
end;
GOSTEI 0
Wilson Junior

Wilson Junior

10/08/2011

Antes de mais nada, sugiro você dar uma olhada nisto http://www.google.com.br/url?sa=t&source=web&cd=3&ved=0CCYQFjAC&url=http%3A%2F%2Fwww.quixada.ufc.br%2Fmonitoria-bd%2Fwp-content%2Fuploads%2F2011%2F05%2F51260222-bd2-apostila-sql-2.pdf&rct=j&q=apostila%20SQL&ei=QepDTvOFKurj0QHMiajXCQ&usg=AFQjCNE0I_gGKVavKsavHzYmSxM7IYbXVg&cad=rja, para melhorar o seu entedimento referente a SQL, assim ficará muito mais fácil.
Quanto aos parâmetros, vai depender da formatação da sua data do PC.
De uma olhada neste link https://www.devmedia.com.br/forum/delphi/383483-ParamByName.html

Espero ter colaborado.

GOSTEI 0
POSTAR