Gülünç bir problem :|

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ByDeniS
Üye
Mesajlar: 144
Kayıt: 03 Oca 2009 12:24
Konum: My Computer

Gülünç bir problem :|

Mesaj gönderen ByDeniS »

Arkadaşlar merhaba diyerek yardımlar için teşekkürder ederek başlıyorum bu yazıya sinirden gelen gülme krizleri içerisinde :)

Delphi'de rastlanması zor bir hata yada benim yazdığım koddan kaynaklanan bir hata. Ama mantıken çok saçma bir hata yapılmak istense yapılamaz sanırım :)

Sorun :

DBGrid üzerindeki bir kolana ait tüm verileri toplamak istiyorum. Yani bir kolana girilmiş olan tüm fiyatları toplayıp toplamını vermekte diyebilirim buna. Şöyle bir kod türettim biraz uğraşarak.

Kod: Tümünü seç

Type
TGrid=class(TDBGrid);

procedure TKasa.Button1Click(Sender: TObject);
var
 adet,satir,i:Integer;
 toplam:Double;
begin
 Table1.Open;
 toplam:=0;
 adet:=StrToInt(Format('%2d',[TGrid(DBGrid1).RowCount-1]));
 Table1.First;
 for i:=0 to adet do
 begin
  toplam:=toplam+DBGrid1.Fields[5].AsCurrency;
  Table1.Next;
 end;
 Label2.Caption:=(FloatToStrF(toplam,ffCurrency,14,0));
end;

Aldığım hata :
Programı başlatıp form'a girdiğim zaman herşey hatasız ve işlemide yaptırıyorum hiç bir hata yok. Ama sadece ekranda gözle görülür olan satırları topluyor :)
Yani 10 satılık ekranda 2 satır görünüyorsa 2 satırı topluyor.. 5 Satır görünüyorsa 5 satırı topluyor. (hatanın enteresan tarafı gözle görülür yerlerde işlem yapması)

Aradığım çözüm gözle görülmeyen kısımları nasıl toplarım :(

Saygılarımla.
·•· Bilgi Güçtür ! Bu Gücü Hisset ! ·•·
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Gülünç bir problem :|

Mesaj gönderen ikra »

gözle görünmeyen taraflarini görünürken olusturuyor ve veritabanindan görünecegi zaman cekiyor olabilir. FETCH komutunu bi arastir. yada sql ile direk SUM al, sonuca daha hizli ulasirsin. kolay gelsin
kıdemsiz üye
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Gülünç bir problem :|

Mesaj gönderen tuna »

Kod: Tümünü seç

Type
TGrid=class(TDBGrid);

procedure TKasa.Button1Click(Sender: TObject);
var
adet,satir,i:Integer;
toplam:Double;
begin
Table1.Open;
toplam:=0;
adet:=StrToInt(Format('%2d',[TGrid(DBGrid1).RowCount-1]));
Table1.First;
for i:=0 to table1.recordcount-1 do
begin
  toplam:=toplam+DBGrid1.Fields[5].AsCurrency;
  Table1.Next;
end;
Label2.Caption:=(FloatToStrF(toplam,ffCurrency,14,0));
end;
Sanırım döngü bitişini gridin rowcount'una bağladığın için oluyor. döngünü yukarıda yazdığım gibi değiştirip denermisin.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Gülünç bir problem :|

Mesaj gönderen aslangeri »

s.a.
maden tablodaki tüm kayıtları alacaksın bu iş için yapılmış olan eof bilgilerini kullansana.
sen döngüyü şöyle yap :D

Kod: Tümünü seç

.....
Table1.First;
while not Table1.Eof do
begin
  toplam:=toplam+DBGrid1.Fields[5].AsCurrency;
  //burada dbgridin fieldiyle değil tablodaki alanla toplasan daha iyi olur. alanın adını bilmediğim için şöyle yazıyorum
  //toplam:=toplam+table1toplanmakistenenalanadi.ascurrency;
  Table1.Next;
end;
Label2.Caption:=(FloatToStrF(toplam,ffCurrency,14,0));
......
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Gülünç bir problem :|

Mesaj gönderen emin_as »

Table1.Open komutundan sonra bir kez table1.last dersen tüm satırlar veritabanından fetch edilir. Fakat bu yöntem iyi değildir. Bu tür toplamları sql ile yapman daha performanslı olur.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Gülünç bir problem :|

Mesaj gönderen conari »

gridde gösterdiğin kayıtları SQL den çeken cümleye ait farklı bir cümle oluşturarak sum() ekle olsun bitsin. döngü ile veya o kadar fieldla uğraşma..
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
ByDeniS
Üye
Mesajlar: 144
Kayıt: 03 Oca 2009 12:24
Konum: My Computer

Re: Gülünç bir problem :|

Mesaj gönderen ByDeniS »

Sum ile yapmayı bende denedim ama başaramadım sum ile yada beceremedim :|
Sum için bir örnek verebilirmisiniz.
·•· Bilgi Güçtür ! Bu Gücü Hisset ! ·•·
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Gülünç bir problem :|

Mesaj gönderen ikra »

Kod: Tümünü seç

select sum(tutar) as toplamtutar from islemtablosu where kriter=kriter
kıdemsiz üye
Cevapla