Fórum Ajuda com dbGrid ou algo parecido #378007
20/05/2010
0
Eduardo
Curtir tópico
+ 0Posts
21/05/2010
Marcio Santos
Cod_Firma,
Firma
From
Historicos_Recebimento
Order By
Cod_Firma
Utilize a propriedade RecordCount da Query ( TADOQuery, TQuery, Etc... ) para obter o número de colunas que o stringgrid possuirá ( RecordCount + 1 ). Ex.: ( Firma1, Firma2, Firma3, Firma4 ) = 5. O número de linhas no StringGrid será o número de anos no intervalo + 1. Ex.: ( 2010, 2009, 2008 ) = 4. Isto configura uma matriz 5x4 ou um StringGrid com 5 colunas e 4 linhas. 2 - Defina as propriedades ColCount e RowCount com, respectivamente, número de colunas e número de linhas: meuStringGrid.ColCount := 5 meuStringGrid.RowCount := 4; obs.: A propriedade ColWidths define a largura de cada coluna. Ex.: ColWidths[ 0 ] := 80; ColWidths[ 1 ] := 420. 3 - Preencha o cabeçalho: With minhaQuery Do Begin First; While Not Eof Do Begin meuStringGrid.Cells[ RecordNo, 0 ] := Fields[ 1 ].AsString; Next; End; End; 4 - Crie uma função para obter o total recebido por firma e ano: Function TotalDaFirma( Cod_Firma, Ano : Integer ) : String; Var qryLocal : TADOQuery; Begin Result := '0,00'; Try qryLocal := TADOQuery.Create( Nil ); With qryLocal Do Begin ConnectionString := 'sua string de conexão'; Sql.Add( 'Select ' );
Sql.Add( ' Sum( Valor_Recebido ) ' );
Sql.Add( 'From ' );
Sql.Add( ' Historicos_Recebimento ' );
Sql.Add( 'Where ' );
Sql.Add( ' Cod_Firma = ' + IntToStr( Cod_Firma ) );
Sql.Add( ' And Year( Data_Recebimento ) = ' + IntToStr( Ano ) ); Open; If Not IsEmpty Then Result := FormatFloat( '########0.00', Fields[ 0 ].AsFloat );
End; Finally FreeAndNil( qryLocal ); End; End; 5 - Preencha as linhas: j := 1; For i := 2010 DownTo 2008 Do Begin Cells[ 0, j ] := IntToStr( i ); With minhaQuery Do Begin First; While Not Eof Do Begin meuStringGrid.Cells[ RecordNo, j ] := TotalDaFirma( Fields[ 0 ].AsInteger, i ); Next; End; End; Inc( j ); End; 6 - Saia para o abraço ( rssss ). Naturalmente você poderá ainda "brincar com o seu stringgrid" trabalhando suas propriedades ( readonly por exemplo ) ou seus eventos ( OnClick por exemplo ) e etc... etc... etc... Espero que tenha ajudado, Abraços.
Gostei + 0
21/05/2010
Eduardo
Gostei + 0
21/05/2010
Eduardo
Gostei + 0
21/05/2010
Eduardo
Gostei + 0
22/05/2010
Marcio Santos
Gostei + 0
23/05/2010
Eduardo
Gostei + 0
23/05/2010
Eduardo
var
i, j :integer;
begin
j:=1;
for I := 2003 to 2013 do
begin
strGrdTeste.Cells[0,j]:=intToStr(i);
Inc(j);
strGrdTeste.ColCount:=5;
strGrdTeste.RowCount:=13;
strGrdTeste.ColWidths[0]:=60;
strGrdTeste.ColWidths[1]:=80;
strGrdTeste.ColWidths[2]:=80;
strGrdTeste.ColWidths[3]:=80;
strGrdTeste.ColWidths[4]:=80;
strGrdTeste.Cells[0,0]:='Ano';
strGrdTeste.Cells[1,0]:='Firma1';
strGrdTeste.Cells[2,0]:='Firma2';
strGrdTeste.Cells[3,0]:='Firma3'; Até aí tudo bem clico no botão e exibe os anos na 1º coluna. Mas e agora preciso informar os valores vendidos anuais em colunas com suas respectivas firmas. Meu simpledataset está assim: Select Distinct (Cod_Firma), Extract (Year From Data_Recebimento) as Ano,
coalesce(sum(valor_Recebido),0) as Total
from Historicos_Recebimento
Group By 1,2
Order by 1,2 Será que dá certo usar assim, como calculo os valores agora??? Obrigado.
Gostei + 0
25/05/2010
Eduardo
Gostei + 0
27/05/2010
Marcio Santos
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)