Yardım!! DBGRİD SUTUNLARDAKİ EŞİTLERİ TOPLAMA

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Yardım!! DBGRİD SUTUNLARDAKİ EŞİTLERİ TOPLAMA

Mesaj gönderen erdogan_ozkaya »

merhaba arkadaşlar,

DBGrid deki satırda kaçtane aynı rakamdan varsa sonuna toplayarak 1'den 15 adet var 0'dan 4 ;Adet var gibi olacak.
Umarım anlatabilmişimdir :)
Nasıl koda yazacağımı bilemediğim için resmi ekledim

Örnek;
Resim

örnekle gönderen olursa çok teşekkür ederim.

Teşekkürler.
En son erdogan_ozkaya tarafından 15 Eki 2010 04:12 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Kullanıcı avatarı
lom
Üye
Mesajlar: 135
Kayıt: 25 Nis 2006 02:37

Re: dbgrid sutunlardaki eşitleri toplama

Mesaj gönderen lom »

Eğer satırdaki rakamlar sabit ise döngü ile sayıların toplamını bulup yazdırabilirsiniz. ama sayılar sabit değil değişebilir diyorsanız sağlam bi sql ile üstadlar çözerler diye düşünüyorum :)
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: dbgrid sutunlardaki eşitleri toplama

Mesaj gönderen conari »

bilgiler dbden mi geliyor.
Calculated Field düşünebilir.
SQL de Stored prosedure oluşturulabilir v.s.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: dbgrid sutunlardaki eşitleri toplama

Mesaj gönderen erdogan_ozkaya »

cevabın için teşekkür ederim
access veritabanı kullanıyorum acaba zamanın varsa örnekte yazıp verebilirmisin ?

Teşekkür Ederim
Dosya ekleri
ornek.rar
Örnek
(11.87 KiB) 66 kere indirildi
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: dbgrid sutunlardaki eşitleri toplama

Mesaj gönderen Lost Soul »

örneğinizi indirmedim ama şöyle birşey yapılabilir.
Denemeden üstünkörü yazdım. Siz düzenlersiniz artık

Kod: Tümünü seç

var
sifirlar,birler,ikiler : Integer;
i: Integer;
Begin
    Tablo.disableControls;
    Tablo.First;
    While not Tablo.Eof do
    Begin
        sifirlar :=0;
        birler :=0;
        ikiler := 0;
        for i := 1 to 31 do
        Begin
            Case Tablo.FieldByName('PREFIX'+IntToStr(i)).Asinteger of
            0:Inc(Sifirlar);
            1:Inc(Birler);
            2:Inc(Ikiler);
            End;
        End;
        Tablo.Edit;
        Tablo.FieldByName('Toplam0').Asinteger := sifirlar;
        Tablo.FieldByName('Toplam1').Asinteger := birler;
        Tablo.FieldByName('Toplam2').Asinteger := ikiler;
        Tablo.Post;
        Tablo.Next;
    End;
    Tablo.EnableControls;
End;
burada PREFIX yerine sizin kayıt adını yazmanız gerekiyor mesela GUN1 GUN2 ise GUN + IntToStr(i) gibi.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: dbgrid sutunlardaki eşitleri toplama

Mesaj gönderen erdogan_ozkaya »

hocam cevabın ve yazın için teşekkür ederim fakat bir türlü çalıştıramadım kodu

Kod: Tümünü seç

Case Tabloa.FieldByName('tablo'+IntToStr(i)).Asinteger of
bu satırda hata veriyor ve düzeltemiyorum bir türlü
verdiği hata 'tablo1'

Teşekkürler.
En son erdogan_ozkaya tarafından 08 Eki 2010 05:24 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: dbgrid sutunlardaki eşitleri toplama

Mesaj gönderen Lost Soul »

erdogan_ozkaya yazdı:hocam cevabın ve yazın için teşekkür ederim fakat bir türlü çalıştıramadım kodu

Kod: Tümünü seç

Case Tabloa.FieldByName('tablo'+IntToStr(i)).Asinteger of
bu satırda hata veriyor ve düzeltemiyorum bir türlü

Teşekkürler.
kodun kendinize uyarladığınız halini ve verdiği hatayı yazarsanız çözüm önerisinde bulunabilirim.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: dbgrid sutunlardaki eşitleri toplama

Mesaj gönderen erdogan_ozkaya »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
sifirlar,birler,ikiler : Integer;
i: Integer;
Begin
    Tabloa.DisableControls;
    Tabloa.First;
    While not Tabloa.Eof do
    Begin
        sifirlar :=0;
        birler :=1;
        ikiler := 2;
       for i := 1 to 31 do
           Begin
            Case Tabloa.FieldByName('tablo'+IntToStr(i)).Asinteger of
            0:Inc(Sifirlar);
            1:Inc(Birler);
            2:Inc(Ikiler);
            End;
        End;
        Tabloa.Edit;
        Tabloa.FieldByName('Toplam0').Asinteger := sifirlar;
        Tabloa.FieldByName('Toplam1').Asinteger := birler;
        Tabloa.FieldByName('Toplam2').Asinteger := ikiler;
        Tabloa.Post;
        Tabloa.Next;
    End;
    Tabloa.EnableControls;
End;
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: dbgrid sutunlardaki eşitleri toplama

Mesaj gönderen Lost Soul »

Yukarıdaki hata mesajını olmayan bir kayıt adına ulaşmaya çalıştığı için veriyor.

burada
Case Tabloa.FieldByName('tablo'+IntToStr(i)).Asinteger of
tablo yazdığınız yere tablo adı değil kayıt adını girmeniz gerekiyor.

Eğer resimde gösterdiğiniz 1 de 10' kadar (Öncekinde 1 de 31'e kadardı) olan ayıt alanları
örneğin aşağıdaki gibi ise

ALAN1
ALAN2
ALAN3
ALAN...
.....

O zaman tablo yazan yere ALAN + InttoStr(i) yazmanız gerekiyor.

ve ayrıca eğer alan sayısı 10 ise o zaman

for i := 1 to 31 do
yerine
for i := 1 to 10 do

yazmanız gerekmektedir.

son olarak sıfırlara 0 birlere 1 ikilere 2 yzmışsınız. bu değişkenler sayaç görevi görüyor o yüzden hepsine 0(sıfır) yazmalısınız
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: dbgrid sutunlardaki eşitleri toplama

Mesaj gönderen erdogan_ozkaya »

zahmet olacak ama acaba örnekte yapabilirmisinz?
beceremedim :(

Kod: Tümünü seç

var
sifirlar,birler,ikiler : Integer;
i: Integer;
Begin
    Tabloa.DisableControls;
    Tabloa.First;
    While not Tabloa.Eof do
    Begin
        sifirlar :=0;
        birler :=0;
        ikiler := 0;
       for i := 1 to 10 do
           Begin
            Case Tabloa.FieldByName('Toplam0'+IntToStr(i)).Asinteger of
            0:Inc(Sifirlar);
            1:Inc(Birler);
            2:Inc(Ikiler);
            End;
        End;
        Tabloa.Edit;
        Tabloa.FieldByName('Toplam0').Asinteger := sifirlar;
        Tabloa.FieldByName('Toplam1').Asinteger := birler;
        Tabloa.FieldByName('Toplam2').Asinteger := ikiler;
        Tabloa.Post;
        Tabloa.Next;
    End;
    Tabloa.EnableControls;
Teşekkürler
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: dbgrid sutunlardaki eşitleri toplama

Mesaj gönderen Lost Soul »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
sifirlar,birler,ikiler : Integer;
i: Integer;
Begin
    Tabloa.DisableControls;
    Tabloa.First;
    While not Tabloa.Eof do
    Begin
        sifirlar :=0;
        birler 	 :=0;
        ikiler   :=0;
       for i := 1 to 10 do // Kayıt sayısına göre bu sayacı arttırıp azaltmalısınız
           Begin
            Case Tabloa.FieldByName(IntToStr(i)).Asinteger of
            0:Inc(Sifirlar);
            1:Inc(Birler);
            2:Inc(Ikiler);
            End;
        End;
		Showmessage(Format('0 Sayısı:%d 1 Sayısı:%d 2 Sayısı:%d',[sifirlar,birler,ikiler]));
		{
        Tabloa.Edit;
        Tabloa.FieldByName('Toplam_0').Asinteger := sifirlar;
        Tabloa.FieldByName('Toplam_1').Asinteger := birler;
        Tabloa.FieldByName('Toplam_2').Asinteger := ikiler;
        Tabloa.Post;
        Tabloa.Next;
		}
    End;
    Tabloa.EnableControls;
End;
kayıt isimlerini rakam ile başlatmışsınız. Normalde değişkenler rakamla başlamaz ama sizinki öyle olmuş. O yüzden sadece sayısal değeri yazmak yeterli olacak.

Ancak size bir de tavsiye. Yazılan bir kodu direk kopyala yapıştr yapıp çalıştırmayın.
Kodun ne yaptığını anlamaya çalışın sonra kodu kendinize göre düzenleyin ve öyle kullanın
eğer sorulan sorudan birşey öğrenilmeyecekse o zaman sormanın da bir anlamı kalmaz.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: dbgrid sutunlardaki eşitleri toplama

Mesaj gönderen erdogan_ozkaya »

hocam cevabın için teşekkür ederim kod çalışıyor fakat ufak bir sorun var.

Kod

Kod: Tümünü seç

for i := 1 to 10 do // Kayıt sayısına göre bu sayacı arttırıp azaltmalısınız

tablodaki bileşeni adını rakam ile yaparsam Örnek= '1' sorun yok çalışıyor ama buseferde kayıt yapmıyor veya eski kaydı düzenlemiyor.
tablodaki bileşeni adını harf ile yaparsam Örnek= 'A1' kayıt yapıyor düzenliyor ama sizin verdiğiniz koddaki 1-10 değilde A1-A10 yaptığımda kod çalışmıyor.
öğrenmeye çelışıyorum verdiğiniz kodda mantık yürütmeye çalışıyorum ama daha acemi ve yeniyim :)

Teşekkürler.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Yardım!! DBGRİD SUTUNLARDAKİ EŞİTLERİ TOPLAMA

Mesaj gönderen erdogan_ozkaya »

tablodaki bileşeni adını rakam ile yaparsam Örnek= '1' sorun yok çalışıyor ama buseferde kayıt yapmıyor veya eski kaydı düzenlemiyor.
tablodaki bileşeni adını harf ile yaparsam Örnek= 'A01' kayıt yapıyor düzenliyor ama sizin verdiğiniz koddaki 1-31 değilde A01-A31 yaptığımda kod çalışmıyor.
birtürlü çözemedim aşağıdaki kod hatavermiyor ama çalışmıyorda

Teşekkürler.

Kod: Tümünü seç

procedure TForm1.Button3Click(Sender: TObject);
var
sifirlar,birler,ikiler : Integer;
i: Integer;
Begin
    Tablo.DisableControls;
    Tablo.First;
    While not Tablo.Eof do
    Begin
        sifirlar :=0;
        birler   :=0;
        ikiler   :=0;
        for i :=  Tablo.FieldByName('A01').Asinteger  to Tablo.FieldByName('A31').Asinteger do
            Begin
            Case Tablo.FieldByName(IntToStr(i)).Asinteger of
            0:Inc(Sifirlar);
            1:Inc(Birler);
            2:Inc(Ikiler);
            End;
        End;
        Tablo.Edit;
        Tablo.FieldByName('Toplam1').Asinteger := sifirlar;
        Tablo.FieldByName('Toplam2').Asinteger := birler;
        Tablo.FieldByName('Toplam3').Asinteger := ikiler;
        Tablo.Post;
       Tablo.Next;
    End;
    Tablo.EnableControls;
end;
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Yardım!! DBGRİD SUTUNLARDAKİ EŞİTLERİ TOPLAMA

Mesaj gönderen conari »

döngüyü şöyle yap

Kod: Tümünü seç

for i := 0  to Tablo.field.count-1 do 
            Begin
            Case Tablo.Field(i).Asinteger of
            ...........................
En son conari tarafından 15 Eki 2010 05:27 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kilitli