dbgridde toplama işlemi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
sako
Üye
Mesajlar: 476
Kayıt: 11 Haz 2003 02:40
Konum: ERZURUM

dbgridde toplama işlemi

Mesaj gönderen sako »

arkadaşlar dbgridde istediğim stünun toplamını alabilirmiyim acaba.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

alabilirsin.

DBGrid'teki bir sütundaki toplamlar = Datasetteki bir alandaki toplamlar.

gerekli SQL ifadesi :

SELECT SUM(ALAN_ADI) FROM TABLO_ADI

Kolay gelsin.
Kullanıcı avatarı
safak
Şafak EBESEK
Mesajlar: 165
Kayıt: 05 Ağu 2003 04:39
Konum: Istanbul
İletişim:

toplama

Mesaj gönderen safak »

Toplanacak bilgilerin miktarı çoksa ve yeni değerler girildiğinde/değiştirildiğinde toplama yansıması isteniyorsa, yukarıdaki çözüm sıkıntı yaratabilir.

Gridi göstermeden önce toplamı alıp, ilgili işlemler sırasında güncellenebilir. Biraz kodlama gerektirir.

Eğer ClientDataset kullanılıyorsa hız pek sorun olmayabilir. Her durumda data miktarı ve güncelleme gerekliliğini gözönünde tutarak karar verilebilir.
naci_ozdemir2001
Üye
Mesajlar: 13
Kayıt: 18 Haz 2003 04:34
Konum: ankara

Mesaj gönderen naci_ozdemir2001 »

Arkadaşım sana biraz kod gönderiyorum umarım işine yarar

değişkenleri de tanımlaman gerekecek
(Bookmark, borçtoplamı, alacaktoplamı)

BookMark:= Cariquery.GetBookmark;
try
Cariquery.DisableControls;
Borctoplami:= 0;
AlacakToplami:= 0;
try
cariquery.open;
cariquery.First;
while not cariquery.Eof do
begin
Borctoplami := Borctoplami + cariqueryborc.Value;
AlacakToplami := AlacakToplami + cariqueryalacak.Value;
cariquery.Next;
end;
finally
cariquery.EnableControls;
end
finally
cariquery.GotoBookmark(Bookmark);
cariquery.FreeBookmark(Bookmark);
end;
advedit1.FloatValue:= Borctoplami;
advedit2.FloatValue:= AlacakToplami;
advedit3.FloatValue:= Borctoplami - AlacakToplami;
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba arkadaşlar herkese kolay gelsin;

Bizde frebird öğrenme amaçlı olarak oturduğum binanın aidat ları ile ilgili bi küçük çalışma yapmak istedim ve düşüncemde,

bi sorgu sayfası (query) ile hazırlayarak dönem veya yıl olarak dairelerin aidatlarını, sıcak su paralarını, ödediklerini, eski borçlarını, eski borç için ödediklerini vs. gösterdikten sonra (dbgridde) grid altına edit ler koyarak bu edit içlerine aidatların toplamı, sıcak suların toplamı, ödenen aidatların toplamı, eski borçların toplamı vs. toplamlarını almak istiyorum. Yani grid sütunlarındaki toplamları atayacağım edit içinde göstermek istiyorum.

Bu işlemi mustafa ustanın dediği gibimi daha kolay olur acaba?

firebird1,5+ibexpert+delphi7 kullanıyorum. Sayısal (parasal) alanlarım integer olarak belirlendi. 40 dairenin aidat işlemleri için.

kolay gelsin.
teşekkürler
ZeynelAbidin
Üye
Mesajlar: 69
Kayıt: 02 Oca 2009 09:03

Re: dbgridde toplama işlemi

Mesaj gönderen ZeynelAbidin »

arkadaşlar tamam bir alanı toplamak sum komutu ile yapılıyor ama ben bunu 1 haftadır yapamadım.acaba queriyi hazırlarken mi hata yaptım.
bunun bir püf noktası olması lazım. ama bulmadım.query oluşturmaktan itibaren bu konuyu açıklayabilirmisiniz.sitedeki bütün sum komutlarını tek tek yaptım ama sonuc alamadım.acaba dbgriddeki bütün kolonlarıda mı sql komut ile mi yapmak gerekiyor.yoksa başka bi şeyler dahamı yapmak gerekiyor.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: dbgridde toplama işlemi

Mesaj gönderen conari »

oluşturduğunuz Query yayınlayın görelim. Böyle müneccimlik olur.

Kod: Tümünü seç

select sum(toplanacakalan) from tablo 
yeterlidir.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
neyfel
Üye
Mesajlar: 3
Kayıt: 08 Oca 2009 11:37

Re: dbgridde toplama işlemi

Mesaj gönderen neyfel »

sende var mı bilmiyorum ama ExpressQuantumGrid, grid içinde toplama yapıyor. Kendin yapmak istersen table veya query'nin onAfterPost ve onAfterDelete olaylarında aşağıdaki sql koduyla toplam alabilirsin.

Kod: Tümünü seç

select Sum(Borc) as ToplamBorc,Sum(Alacak) as ToplamAlacak from Hareket
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: dbgridde toplama işlemi

Mesaj gönderen akdatilla »

conari yazdı:oluşturduğunuz Query yayınlayın görelim. Böyle müneccimlik olur.

Kod: Tümünü seç

select sum(toplanacakalan) from tablo 
yeterlidir.
Bu fikir iyi bir çözüm olmaz bence.
DBGrid içinde listelenen alanın herhangi bir tablodan alınan herhangi bir alan olduğunu nereden biliyorsun.
Örnek olarak dbgrid üzerinde calculated bir alan olduğunu düşün. Bu alan çalışma zamanında programcının belirlediği formule göre hesaplanır.
Hesap içerisinde veritabanında olmayan rakamlar da işin içinde bulunabilir.

Bir de yapmak istediğimizin dbgridden türettiğimiz içinde kolonları toplayabilme özelliği olan bileşen olduğunu düşünelim.
DBGrid içerisinde görüntülenen kolonları / alan bilgilerini bu bileşen içerisinde kullanabiliriz.
Ancak x kolonunda görüntülenen alan hangi tablodan geliyor bunu
kolay birşekilde bilemeyiz. Düşünün dbgrid herzaman bir tabloya veya bir querye bağlanması gerekmez.
DBGridin bir datasource bağlıdır. Datasource dataset nesnesine bağlıdır. Dataset nesnesinde tablo adı diye bir özellik yoktur.....

Bence daha genel bir çözüm olarak dbgridin bağlı olduğu dataset nesnesinde başdan sona doğru bir döngü kurup kolon toplamının hesaplanması
gerekir. cxGrid gibi gelişmiş bir grid bileşini de bu şekilde bir çalışma yapıyor.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: dbgridde toplama işlemi

Mesaj gönderen conari »

@akdatilla
Sana illaki katılıyorum. Zaten cevabımın başında belirttim. @ZeynelAbidin Arkadaş query kullanmış, be de görmeden yorum yapmak müneccimlik olur dedim.

SQL cümlesini toplam almaya en basit örnek olarak verdim, bunu illa dbgridteki query de kullanacak diye bir şey yok yani.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: dbgridde toplama işlemi

Mesaj gönderen akdatilla »

Foruma DBGriddeki bir kolonun toplamının hesaplanabilmesi için bir fonksiyon gönderdim.
viewtopic.php?f=19&t=24963&p=141252#p141252
ZeynelAbidin
Üye
Mesajlar: 69
Kayıt: 02 Oca 2009 09:03

Re: dbgridde toplama işlemi

Mesaj gönderen ZeynelAbidin »

arkadaşlar tamam toplama işlemini yaptırdım.benim zaten sormak istediğim query bağlantılarındamı hata yaptığım idi.bağlantıları querynin datasource kısmını boş bırakıpda data sourcenin datset kısmına query seçilipte querynin fields editör kısmındaki bütün datalar silince toplama yapıyor. ve diğer sql komutlarını işetebiliyorum kolaylıkla.ama şimdi şöyle bir problemim var.db gridde veri girişi yapıyorum ve bana calculated field alanı lazım. bu sorunu nasıl giderebilirim.kodlar ile calculated field alanı eklenbiliyormu. çünkü field editör kısmında calculated field ekliyorum ve programı çalıştırdğım zaman hata veriyor.bütün fieldları fields editörde ekleyip işlem yaptığım zmana ise toplama yapamıyorum.veya calculated field kullanmadan başka bir şekilde ypabilirmiyim.şimdiye kadar hep table kullandım ve sorunları bi şekilde çözüyorrdum ama queryde yeni olduğum için baya bir zorlanıyorum.kullandığım veri tabanı paradox.
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: dbgridde toplama işlemi

Mesaj gönderen akdatilla »

bağlantıları querynin datasource kısmını boş bırakıpda data sourcenin datset kısmına query seçilipte querynin fields editör kısmındaki bütün datalar silince toplama yapıyor
:?
Ne diyosun hiç bişey anlamadım.

db gridde veri girişi yapıyorum ve bana calculated field alanı lazım. bu sorunu nasıl giderebilirim.
:?
calculated field kullanman veri girişi yapmanı engellemez (tabi sorun buysa)
kodlar ile calculated field alanı eklenbiliyormu
evet eklenir

Kod: Tümünü seç

with TStringField.Create(Query1) do
begin
       Name:='Query1CalculatedToplam';
       Calculated:=True;
       DisplayName:='Toplam';
       FieldName:='Toplam';
       Visible:=True;
       Size:=30;
       DataSet := Query1;
end;
çünkü field editör kısmında calculated field ekliyorum ve programı çalıştırdğım zaman hata veriyor
Hata mesajı nedir ?
ZeynelAbidin
Üye
Mesajlar: 69
Kayıt: 02 Oca 2009 09:03

Re: dbgridde toplama işlemi

Mesaj gönderen ZeynelAbidin »

hata dediğim toplama yapmak istediğim zaman toplama yapmaması veya fields editör ile bütün field ları eklemediğimişden dolayı birinci fielddan başlayarak bu field yok hatası veriyor. toplama yaparken select ile bütün fieldleri seçiyorum öyle toplama yaptırmak istiyorum. ozmanada null ile integer isteniyor gibi bir hata veriyor. birde bu kodu nereye yazmamı önerirsiniz.birde bu işlemi sql kodu ile yapamazmıyız. alter table gibi bir olay.kodları denemedim ama sanki buda olmayacakmış gibime geliyor.kodları ancak akşam evde deneyebilirim.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: dbgridde toplama işlemi

Mesaj gönderen aslangeri »

s.a.
query kıtlığımı var? :D
sql i değiştireceğine forma ikinci bir query nesnesi koy onu kullan :!:
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla