DBGRID Toplama İşlemi Hakkında

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
emrekilinc1984
Üye
Mesajlar: 58
Kayıt: 15 Eyl 2016 12:13

DBGRID Toplama İşlemi Hakkında

Mesaj gönderen emrekilinc1984 »

Merhaba arkadaşlar,

DBgrid'te örneğin column[1] deki toplamı almak istiyorum ve dbgrid'deki toplam satır sayısını nasıl toplam alıp edit'e atabilirim yardımlarınız için şimdiden teşekkürler.
cobalt
Üye
Mesajlar: 9
Kayıt: 26 Eyl 2016 06:58

Re: DBGRID Toplama İşlemi Hakkında

Mesaj gönderen cobalt »

Çok fazla bilgim olmamakla birlikte böyle bir sorunum vardı aşağıdaki kodlar ile çözdüm. Umarım seninde işine yarar. burada tablonun ismi "senintablon" olarak, edit ise "edit1" olarak alınmıştır.

Kod: Tümünü seç

type
yenigrid=class(TDBGrid);//Yeni class tanımlandı

procedure TForm1.Button1Click(Sender: TObject);
var

adet,satir,i:Integer;
toplam:Double;

begin
tablesenintablon.Open; //senintablon yazan yere tablonun adını yaz
toplam:=0;
adet:=StrToInt(Format('%2d',[yenigrid(DBGrid1).RowCount-1]));//satır sayısı
tablesenintablon.First;//ilk kayıda git
for i:=1 to adet do
begin
toplam:=toplam+DBGrid1.Fields[1].AsCurrency;//sonuca ekle , Fields[1] hangi sütunun toplanacağını belirtir.Sütun sayısı yanılmıyorsam sıfır ( 0 ) dan başlar
tablesenintablon.Next;//sonraki kayda geç
end;
edit1.Text:= FloatToStrF(toplam,ffNumber,14,2) ;

end;
emrekilinc1984
Üye
Mesajlar: 58
Kayıt: 15 Eyl 2016 12:13

Re: DBGRID Toplama İşlemi Hakkında

Mesaj gönderen emrekilinc1984 »

bu kod var bende ben adet toplamı alacağım yani dbgrid tablo toplamı değil dbgride girilen veri toplamı yani yinede saol..
bestofhoke
Üye
Mesajlar: 30
Kayıt: 14 Mar 2017 04:01

Re: DBGRID Toplama İşlemi Hakkında

Mesaj gönderen bestofhoke »

bende onu arıyorum dbgrid e girilen verinin toplamını alacak ama yapamıyorum bir türlü araştırdım bulamadım..
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: DBGRID Toplama İşlemi Hakkında

Mesaj gönderen Lord_Ares »

Sorunun cevabı.. her yeni kayıt eklediğinde aşağıdaki şekilde for döngüsü ile tüm kayıtları toplatıcaksın çıkanı edite yazdırıcaksın.

Kod: Tümünü seç

begin
Table1.first;
for x:= 1 to table1. recordcount do begin
toplam:=toplam+column1.asinteger;
Table1.next;
end;
edit1.text:=inttostr(toplam);
end;
En son Lord_Ares tarafından 18 Nis 2017 08:34 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
bestofhoke
Üye
Mesajlar: 30
Kayıt: 14 Mar 2017 04:01

Re: DBGRID Toplama İşlemi Hakkında

Mesaj gönderen bestofhoke »

Henüz denemedim ama burada tüm kayıtları topluyor gibi, sadece DBGrid de bir sutunun toplamını alıcam yani fields[0] da girilen verilerin toplamı gibi..
bestofhoke
Üye
Mesajlar: 30
Kayıt: 14 Mar 2017 04:01

Re: DBGRID Toplama İşlemi Hakkında

Mesaj gönderen bestofhoke »

for x:= 1 to table1.recordcount then --- hocam bu satırda hata veriyor şuan uğraşıyorum üzerinde ama anlayamadım
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: DBGRID Toplama İşlemi Hakkında

Mesaj gönderen Lord_Ares »

for x:= 1 to table1.recordcount Do ekliyeceksiniz. Then kısmını silin. Sanırım gözünüzden kaçıyor table1 deki tüm kayıtları değil Toplam+colums1.asinteger dediğimiz için o alanı topluyor.
bestofhoke
Üye
Mesajlar: 30
Kayıt: 14 Mar 2017 04:01

Re: DBGRID Toplama İşlemi Hakkında

Mesaj gönderen bestofhoke »

hocam table nesnesiyle çok uğraştım olmayınca query'e geçtim bununla sorunu çözdüm şu şekilde aktardım verileri... ancak bu seferde dbgrid den çektiğim alis ve satis sutunları toplamlarının farkını almak istiyorum hatta aşagıda ki kodda da mevcut deniyorum şuan fark kodu da çalışıyor farkını alıyor ama bazen doğru fark alıyor bazen yanlış alıyor farklarını doğru bir şekilde nasıl alabilirim nerede hata yapıyorum?
-----
procedure Tkasaislemleri.BitBtn4Click(Sender: TObject);
var
x,alis,satis,fark:integer;
begin
siparisislemleri.Query1.Active:=false;
siparisislemleri.Query1.SQL.Clear;
siparisislemleri.Query1.SQL.Add('Select * from siparis');
siparisislemleri.Query1.SQL.Add(kasaislemleri.Edit1.Text+kasaislemleri.Edit2.Text+kasaislemleri.Edit3.Text);
siparisislemleri.Query1.Active:=true;
alis:=0;
satis:=0;
fark:=0;
edit1.Clear;
edit2.Clear;
edit3.Clear;
for x:=1 to siparisislemleri.Query1.RecordCount do
begin
siparisislemleri.Query1.RecNo:=x;
alis:=siparisislemleri.Query1Urun_Birim_Alis.AsInteger+alis;
satis:=siparisislemleri.Query1Urun_Birim_Satis.AsInteger+satis;
fark:=(siparisislemleri.Query1Urun_Birim_Satis.AsInteger)-(siparisislemleri.Query1Urun_Birim_Alis.AsInteger);
end;
kasaislemleri.Edit1.Text:=inttostr(alis)+'.00 TL';
kasaislemleri.Edit2.Text:=inttostr(satis)+'.00 TL';
kasaislemleri.Edit3.text:=inttostr(fark)+'.00 TL';
begin
BitBtn4.Enabled:=false;
Bitbtn3.Enabled:=true;
end;
end;
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: DBGRID Toplama İşlemi Hakkında

Mesaj gönderen Lord_Ares »

for dan önce bir adet Query1.first ve fark:= ile end arasına da bir tane ouery1.next ekleyip denermisin... sanırım sebebi dbgiridteki seçili kalan kayıttan başlıyor döngüye o yüzden olabilir. Birde kasaişlemleri editlerin varya onlara her defasında şunu yazmak istemiyorsan +'.00 TL';
O editin onchange kısmına şöyle yapabilirsin kasailemleri.edit1.text:=kasaislemleri.edit1.text+'.00 TL';
böylece sürekli yazmak zorunda kalmazsın.. Hepsine böyle yapabilirsin.
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: DBGRID Toplama İşlemi Hakkında

Mesaj gönderen ertank »

emrekilinc1984 yazdı:Merhaba arkadaşlar,

DBgrid'te örneğin column[1] deki toplamı almak istiyorum ve dbgrid'deki toplam satır sayısını nasıl toplam alıp edit'e atabilirim yardımlarınız için şimdiden teşekkürler.
Merhaba,

Öncelikle soru sorar iken mümkün mertebe detay bilgi paylaşmanızda fayda var. İlk akla gelen sorular: Kullandığınız Delphi sürümünü nedir? Kullandığınız database sunucu bilgilerini paylaşabilir misiniz? Database bağlantısı için kullandığınız bileşenler nelerdir?

Sorunuz farklı anlaşılabiliyor. Mesela sizin "DBGird'te" şeklinde ifade ettiğiniz ifadeyi ben "database içindeki tablo kayıtları içindeki" şeklinde anlıyorum. DBGrid sadece bu kayıtları ekranda göstermek için kullanılan bir bileşendir. DBGrid'in bağlı olduğu bir TDataSet bazlı bir query veya table bileşeni vardır.

Bu açıklamalardan sonra yapmak istediğiniz aşağıdakilerden hangisi acaba?
1- Ekranda gösterilen bilerin kaç satır olduğunu bulmak istiyorsunuz?
2- Ekranda gösterilen bilgilerden bir/birkaç alan değerlerinin toplamını bulmak istiyorsunuz? Eğer bunu yapmak istiyor iseniz database tablosu alan isimlerini de paylaşmanız gerekecektir.

1 numaralı soru için aşağıdaki gibi bir kod yazmanız mümkün olabilir. Ancak daha detaylı bilgi verir iseniz daha pratik yöntemlerle de bu bilgiye ulaşmak mümkün olabilir.

Kod: Tümünü seç

DBGrid1.DataSource.DataSet.DisableControls();
DBGrid1.Last();  // Birçok database sunucu veya bileşen database tablosu içindeki tüm satırları tablonun son kaydına gitmeden okumaz
DBGrid1.First(); 
DBGrid1.DataSource.DataSet.EnableControls();
Edit1.Text := 'Toplam kayıt sayısı: ' + FormatFloat('#,##0', DBGird1.DataSource.DataSet.RecordCount); // Tüm satır bilgileri okunmadan RecordCount değeri hatalı olacaktır.
2 numaralı soru için cevap vermeden önce detay bilgi paylaşmanızı rica ediyorum. Zira bu detay bilgiler olmadan doğru cevap vermek mümkün olmayacaktır.
bestofhoke
Üye
Mesajlar: 30
Kayıt: 14 Mar 2017 04:01

Re: DBGRID Toplama İşlemi Hakkında

Mesaj gönderen bestofhoke »

Lord_Ares yazdı:for dan önce bir adet Query1.first ve fark:= ile end arasına da bir tane ouery1.next ekleyip denermisin... sanırım sebebi dbgiridteki seçili kalan kayıttan başlıyor döngüye o yüzden olabilir. Birde kasaişlemleri editlerin varya onlara her defasında şunu yazmak istemiyorsan +'.00 TL';
O editin onchange kısmına şöyle yapabilirsin kasailemleri.edit1.text:=kasaislemleri.edit1.text+'.00 TL';
böylece sürekli yazmak zorunda kalmazsın.. Hepsine böyle yapabilirsin.
Hocam dediğini yaptım ancak sorun halen devam ediyor yalnız şöyle bir şey var dbgrid'e girilen ilk kaydın farkını hep doğru alıyor gösteriyor ancak 2.3.4. kayıtlarda yani sonraki kayıtlarda aradaki farkı yanlış alıyor..
bestofhoke
Üye
Mesajlar: 30
Kayıt: 14 Mar 2017 04:01

Re: DBGRID Toplama İşlemi Hakkında

Mesaj gönderen bestofhoke »

ertank yazdı:
emrekilinc1984 yazdı:Merhaba arkadaşlar,

DBgrid'te örneğin column[1] deki toplamı almak istiyorum ve dbgrid'deki toplam satır sayısını nasıl toplam alıp edit'e atabilirim yardımlarınız için şimdiden teşekkürler.
Merhaba,

Öncelikle soru sorar iken mümkün mertebe detay bilgi paylaşmanızda fayda var. İlk akla gelen sorular: Kullandığınız Delphi sürümünü nedir? Kullandığınız database sunucu bilgilerini paylaşabilir misiniz? Database bağlantısı için kullandığınız bileşenler nelerdir?

Sorunuz farklı anlaşılabiliyor. Mesela sizin "DBGird'te" şeklinde ifade ettiğiniz ifadeyi ben "database içindeki tablo kayıtları içindeki" şeklinde anlıyorum. DBGrid sadece bu kayıtları ekranda göstermek için kullanılan bir bileşendir. DBGrid'in bağlı olduğu bir TDataSet bazlı bir query veya table bileşeni vardır.

Bu açıklamalardan sonra yapmak istediğiniz aşağıdakilerden hangisi acaba?
1- Ekranda gösterilen bilerin kaç satır olduğunu bulmak istiyorsunuz?
2- Ekranda gösterilen bilgilerden bir/birkaç alan değerlerinin toplamını bulmak istiyorsunuz? Eğer bunu yapmak istiyor iseniz database tablosu alan isimlerini de paylaşmanız gerekecektir.

1 numaralı soru için aşağıdaki gibi bir kod yazmanız mümkün olabilir. Ancak daha detaylı bilgi verir iseniz daha pratik yöntemlerle de bu bilgiye ulaşmak mümkün olabilir.

Kod: Tümünü seç

DBGrid1.DataSource.DataSet.DisableControls();
DBGrid1.Last();  // Birçok database sunucu veya bileşen database tablosu içindeki tüm satırları tablonun son kaydına gitmeden okumaz
DBGrid1.First(); 
DBGrid1.DataSource.DataSet.EnableControls();
Edit1.Text := 'Toplam kayıt sayısı: ' + FormatFloat('#,##0', DBGird1.DataSource.DataSet.RecordCount); // Tüm satır bilgileri okunmadan RecordCount değeri hatalı olacaktır.
2 numaralı soru için cevap vermeden önce detay bilgi paylaşmanızı rica ediyorum. Zira bu detay bilgiler olmadan doğru cevap vermek mümkün olmayacaktır.
Hocam haklısın aslında sorunu detaylı açıklamak lazımdı. Delphi 7, Parodox verirabanı, Query, Table, Datasource nesnelerini kullanıyorum.
Benim sorum 2.soruya daha yakın bir kaç alanın toplamını buluyorum(yukarıda ki kod ile) ancak bu bulduğum alanların toplamlarının farkını almak istiyorum.

işlem yaptığım form ve veritabanı şu şekilde;
kasaislemleri ve siparisislemleri formları var aynı zamanda siparis veritabanı var siparis veritabanını hem kasaislemleri hemde siparisislemleri form'unda kullanıyorum bir veritabanı iki form'da birden kullanıyorum yani.

siparis veritabanında işlem yaptırmak istediğim alan isimleri ise şu şekilde;
Urun_Birim_Alis
Urun_Birim_Satis

bu iki alanın toplamlarını alıyorum örnek veriyorum Urun_Birim_Alis sütunundaki değerlerin toplamı 500 olsun Urun_Birim_Satis sütunundaki değerlerin toplamı ise 750 olsun bu tamam yapmak istediğim ise;

(Urun_Birim_Satis) - (Urun_Birim_Alis) = (Kar/Zarar/Fark)

Not: (Kar/Zarar/Fark) alanı veritabanında mevcut değil sadece edite yazdırmaya çalışıyorum oluşacak değeri.

Aşağıdaki kodda ise toplamlarını ve farkını alıyor ancak dbgrid'e girilen ilk kaydın farkını doğru yazdırıyor 2,3,4. kayıtlar ve sonraki kayıtlarda ise farkını yanlış alıyor.
-------
procedure Tkasaislemleri.BitBtn4Click(Sender: TObject);
var
x,alis,satis,fark:integer;
begin
siparisislemleri.Query1.Active:=false;
siparisislemleri.Query1.SQL.Clear;
siparisislemleri.Query1.SQL.Add('Select * from siparis');
siparisislemleri.Query1.SQL.Add(kasaislemleri.Edit1.Text+kasaislemleri.Edit2.Text+kasaislemleri.Edit3.Text);
siparisislemleri.Query1.Active:=true;
alis:=0;
satis:=0;
fark:=0;
edit1.Clear;
edit2.Clear;
edit3.Clear;
for x:=1 to siparisislemleri.Query1.RecordCount do
begin
siparisislemleri.Query1.RecNo:=x;
alis:=siparisislemleri.Query1Urun_Birim_Alis.AsInteger+alis;
satis:=siparisislemleri.Query1Urun_Birim_Satis.AsInteger+satis;
fark:=(siparisislemleri.Query1Urun_Birim_Satis.AsInteger)-(siparisislemleri.Query1Urun_Birim_Alis.AsInteger);
end;
kasaislemleri.Edit1.Text:=inttostr(alis)+'.00 TL';
kasaislemleri.Edit2.Text:=inttostr(satis)+'.00 TL';
kasaislemleri.Edit3.text:=inttostr(fark)+'.00 TL';
begin
BitBtn4.Enabled:=false;
Bitbtn3.Enabled:=true;
end;
end;
-----------
Hocam sorun tam olarak bu şekilde :)
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: DBGRID Toplama İşlemi Hakkında

Mesaj gönderen ertank »

BitBtn4 isimli butonu ilk kez tıkladığınız zaman aşağıdaki değerler neler?
kasaislemleri.Edit1.Text
kasaislemleri.Edit2.Text
kasaislemleri.Edit3.Text
bestofhoke
Üye
Mesajlar: 30
Kayıt: 14 Mar 2017 04:01

Re: DBGRID Toplama İşlemi Hakkında

Mesaj gönderen bestofhoke »

ertank yazdı:BitBtn4 isimli butonu ilk kez tıkladığınız zaman aşağıdaki değerler neler?
kasaislemleri.Edit1.Text
kasaislemleri.Edit2.Text
kasaislemleri.Edit3.Text
İlk tıkladığımda eğer dbgrid de kayıt yoksa üçünüde 0 gösteriyor dbgridde sadece bir kayıt varsa o kaydın urun birim alis toplamı ve urun birim satis toplamı ve farkını gösteriyor 1 den fazla kayıt varsa birim alis ve birim satis doğru ancak fark yanlış gösteriyor hocam.
Cevapla