DBGrid Üzerinde CalcField Sütunun Toplamını Almak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

DBGrid Üzerinde CalcField Sütunun Toplamını Almak

Mesaj gönderen canset »

Slm;

2 haftadır taramadığım konu almadı, uğraşılarım da sonuç vermedi, aşağıdaki resime bakıp, detaylı bir tarif ile hangi kodu nereye yazacağımı, neyi nereye bağlamam gerektiğini anlatabilecek ve benim derdime çare olabilecek var mı??

Access vt ile adodataset kullandım.

Resim
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak

Mesaj gönderen orhancc »

Kod: Tümünü seç

procedure TForm1.Button3Click(Sender: TObject);
var
 i:Integer;
 sum:Currency;
begin
  Table1.First;
  sum := 0;

  for i:=0 to Table1.RecordCount - 1 do
    begin
      sum := sum + Table1.FieldValues['Tutar']; // Tutar alanın currency değilse ona göre dönüşüm yapmalısın
      Table1.Next;
    end;

    ToplamEdit.Text := CurrToStr(sum);
end;
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak

Mesaj gönderen canset »

Sn. Orhancc, verdiğiniz koda ulaştım ama sorunuma çare olmadı, Genel Toplam ı bir buton ile almayacağız, şu şekilde alacağız:

DbGridtampon olarak adlandırdığım sağdaki dbgrid de miktar ve fiyat alanlarında oynama yapabiliyoruz. Dolayısı ile tutar alanı da calcfield olarak düzenlendi. Bu durumda kimin hangi eventine hangi yordamı yazmalıyım ki alttaki Genel Tutar'ı sorunsuz şekilde elde edebileyim? Yani aklımdan geçen dbgrid(tutar)'ı dbgrid deki değişime göre döngüye sokup satırların toplamını almak ve bunu alttaki Genel Toplam edit'ine aktarabilmek...Ama nasıl yapmalıyım, burada tıkandım ve ilerleyemiyorum bir türlü.
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak

Mesaj gönderen orhancc »

zaten düğme ile yapmaycaksın ben kodu örnek olsun diye gönderdim fieldlerin onchange eventi var oraya bağlayabilrisin ya da düzgün bir grdi kullanırsın bunları yapmana bile gerek kalmaz.
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak

Mesaj gönderen canset »

Düzgün grid??
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak

Mesaj gönderen orhancc »

BU toplamları yapan gridler var senin uğraşmana gerek yok.
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak

Mesaj gönderen canset »

eee, kaldık yine ortada :(
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak

Mesaj gönderen canset »

Başka önerisi olanlar var mı?
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak

Mesaj gönderen sabanakman »

Kod: Tümünü seç

////-> tablotampona aktarma kodlarınız
//.........
////<-  ->tablo tampona aktarım kodlarınızın hemen altına
ADOQueryGenel.Recordset:=ADOConnection.Execute('select sum(Fiyat*Miktar) from tampon');
//tampon tablo için tutar toplamı hesaplandı
EditGenelToplam:=ADOQueryGenel.Fields[0].AsString;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak

Mesaj gönderen canset »

AdoQueryGenel'i tablotampon a mı bağlamalıyım, yoksa onun için ayrı bir tablo mu oluşturmalıyım? (İçinde Genel Toplam alanı bulunduran ve sum ile başlayan işlemi aktarabileceğimiz)
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak

Mesaj gönderen sabanakman »

Form üzerine atın boşta kalabilir. "ADOQueryGenel.Recordset:=ADOConnection.Execute('select ..." şeklinde Recordset atamasında ne Connection ne de SQL ayarlanmasında gerek yoktur. Ayarlanmasında da sakınca yoktur ama bu atama olmadan önce sorgunun kapalı olması (ADOQueryGenel.Close) gerekmektedir.

Eğer bu kullanım içinize sinmezse, sorgu cümlesini bu bileşenin SQL özelliğine direkt yazarak ve Connection özelliğini ayarlayarak çalışabilirsiniz.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak

Mesaj gönderen canset »

Kod: Tümünü seç

procedure TFormsatis.Button1Click(Sender: TObject);
begin
formsatis.Hide;
formurun.show;
end;

procedure TFormsatis.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
adodataseturun.Open;
adodataseturun.Filtered:= false;
if key=#13 then begin
if not adodataseturun.Locate('barkod',edit1.Text, []) then
begin
Showmessage ('Kayıt Bulunamadı');
end else
begin
adodataseturun.Open;
adodataseturun.Edit;
adodatasettampon.Edit;
adodataseturun.Locate('barkod',edit1.Text, []);
if adodataseturunbarkod.Text=adodatasettamponbarkod.Text then
begin
adodatasettampon.Edit;
adodatasettamponmiktar.Value:= adodatasettamponmiktar.Value+1;
adodatasettampon.First;
end else
begin
adodataseturun.Open;
adodatasettampon.Edit;
adodatasettampon.Locate('barkod',edit1.text, []);
if adodatasettamponbarkod.Text=adodataseturunbarkod.Text then
begin
adodatasettampon.Edit;
adodatasettamponmiktar.Value:= adodatasettamponmiktar.Value+1;
adodatasettampon.First;
end else
begin
adodataseturun.Open;
adodatasettampon.Insert;
adodatasettamponbarkod.Text:= adodataseturunbarkod.Text;
adodatasettamponmal.Text:= adodataseturunmal.Text;
adodatasettamponiskonto.Value:= adodataseturuniskonto.Value;
adodatasettamponfiyat.AsCurrency:= adodataseturunfiyat.AsCurrency;
adodatasettamponmiktar.Value:=1;
adodatasettamponkar.AsCurrency:= (adodataseturunfiyat.AsCurrency-adodataseturunmaliyet.AsCurrency);
adodatasettamponkartoplam.AsCurrency:= adodatasettamponmiktar.Value*adodatasettamponkar.AsCurrency;

AdoqueryGenel.Recordset:= ADOConnectionurun.Execute('select sum((miktar*fiyat)-((miktar*fiyat*iskonto)/100)) from tablotampon');
EdGenelToplam.Text:= AdoQueryGenel.Fields[0].AsString;

end;
end;
end;
edit1.SetFocus;
edit1.Text:='';
end;
Form üzerine AdoQuery atıp, hiçbir bağlantı yapmadan kodu tampona atama yaptığım kodun altına yerleştirdim ancak şu uyarıyı aldım:

'Gerekli bir veya daha fazla parametre için girilen değer yok'

Bir de şunu sorayım, adoquerygenel.fields[0] , böyle bir alanımız normalde yok, kendisi mi oluşturacak burayı tam anlamadım.

Bir diğer soru da şu; dbgrid üzerinde biz miktar veya fiyat sütununda istediğimiz şekilde oynama yapabilecez, bu bakımdan bu kodun tampona atama yaptığımız kodun altına yerleştirilmesi GenelToplam'ı sağlıklı şekilde alabilmemize yetecek mi? Daha önce buna benzer birşey denedim, dbgrid de yapılan değişikliği anında GenelToplam a aksettiremedim, ancak barkoddan yeni ürün okutturulduğunda değişimi komple algıladı, bu da sorun olmuştu...Yani kodu datasource'un onchange olayına yazmalıyız gibi düşünüyordum ben!! Yanlış mı??
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak

Mesaj gönderen sabanakman »

AdoqueryGenel'in Parameters özelliğinde parametreler varsa silin.

adoquerygenel.fields[0] gibi bir kullanım açık olan tablonun ilk sıradaki Field (Alan) ını verir ve bu alan değeri okunarak gereken yapılmaktadır.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak

Mesaj gönderen canset »

AdoQueryGenel Parameters zaten boş.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak

Mesaj gönderen sabanakman »

Sorguda büyük küçük harflere karşı duyarlı olmalısınız. Özellikle büyük I harfi yerine küçük i harfi yazımlarında sorun çıkabiliyor.

Kod: Tümünü seç

select sum((Miktar*Fiyat)-((Miktar*Fiyat*Iskonto)/100)) from TabloTampon
Bu sorgu kayıtları doldurulmuş tampon kayıtlardan toplamı getirecektir.

Ayrıca projenizde bir adet .mdb dosyası kullanıyorsanız sadece bir ADOConnection bileşeninin ConnectionString özelliğini bu dosyaya ayarlayın. Diğer tüm bileşenlerin Connection özelliğini de bu ADOConnection bileşenine yönlendirirseniz daha sağlıklı olacaktır.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla