DataSet summary

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

DataSet summary

Mesaj gönderen akdatilla »

Merhaba
Aşağıdaki fonksiyon dataset nesnesinin istenilen kolonunun toplamını/ortalamasını veya dataset içindeki kayıt sayısını veriyor.

Kod: Tümünü seç

Function DataSetColSummary(DataSet:TDataSet;Column,SumType:String):Double;
Var
   Deger,minDeger:Double;

   s:string;
   d:Double;
   sc,st,rn:integer;
   TarihHesapla:boolean;
begin
     Result:=0;
     minDeger:=0;
     Deger:=0;
     DataSet.DisableControls;
     rn:=DataSet.RecNo;
     if SumType='Kayıt Sayısı' then
     Result:=DataSet.RecordCount
     else
     Begin
          if SumType='Ortalama' then st:=1
          else
          if SumType='Toplam' then st:=2
          else exit;
          Case DataSet.FieldByName(Column).DataType of
               ftInteger,ftSmallint,
               ftAutoInc,ftLargeint,
               ftWord,ftFloat,ftCurrency:TarihHesapla:=False;
               ftDate,ftTime,ftDateTime,ftTimeStamp:TarihHesapla:=True;
               else exit;
          End;
          sc:=DataSet.RecordCount;
          DataSet.First;
          While Not DataSet.Eof do
          Begin
               d:=DataSet.FieldByName(Column).AsFloat;
               Deger:=Deger+d;//sum,avg
               if TarihHesapla then
               Begin
                    if (minDeger=0) or (d<minDeger) then
                    minDeger:=d;
               End;
               DataSet.Next;
          End;
          if sc>0 Then
          Begin
               Case st of
                    1:
                    Begin
                         Deger:=Deger/sc;
                    end;
                    2:
                    Begin
                         if TarihHesapla then
                         Begin
                              Deger:=Deger-(minDeger*sc);
                         End;
                    End;
               End;
          End;
          Result:=Deger;

     End;

     DataSet.MoveBy(rn-DataSet.RecNo);
     DataSet.EnableControls;
End;
Örnek kullanım

Kod: Tümünü seç

procedure TForm1.DBGrid1CellClick(Column: TColumn);
Var
   a,b,c:Double;
begin
     a:=DataSetColSummary(DBGrid1.DataSource.DataSet,Column.FieldName,'Ortalama');
     b:=DataSetColSummary(DBGrid1.DataSource.DataSet,Column.FieldName,'Toplam');
     c:=DataSetColSummary(DBGrid1.DataSource.DataSet,Column.FieldName,'Kayıt Sayısı');///bu pek kullanışlı değil. onun yerine dataset.recordcount daha uygun olur
     Edit1.Text:=Trim(sysutils.format('%8.2n',[a]));
     Edit2.Text:=Trim(sysutils.format('%8.2n',[b]));
     Edit3.Text:=Trim(sysutils.format('%8.2n',[c]));
end;

Cevapla