kayıtların aylara göre toplanması

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
akuyumcu63
Üye
Mesajlar: 386
Kayıt: 02 Tem 2007 09:43

kayıtların aylara göre toplanması

Mesaj gönderen akuyumcu63 »

değerli arkadaşlar;

cekler isminde tablom var. tablodaki kayıtların aylara göre toplanıp edit'e aktarılmasını nasıl yapabilirim. 1. ay toplmı edit1 de 2. ay toplamı edit2 de gibi

kolay gelsin.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: kayıtların aylara göre toplanması

Mesaj gönderen sabanakman »

akuyumcu63 yazdı:değerli arkadaşlar...
Büyüklerin ellerinden, küçüklerin gözlerinden öpmeyi unutmuşsun :) .

Neyse şakayı bir yana bırakırsak; sorunun cevabını şöyle bir sorgu ile aylara göre toplamını alabilirsin. Örneğim SQL Server'a göre olacak.

Kod: Tümünü seç

select month(EvrakTar), sum(tutar) from cekler group by month(EvrakTar)
İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
akuyumcu63
Üye
Mesajlar: 386
Kayıt: 02 Tem 2007 09:43

Mesaj gönderen akuyumcu63 »

elimden geldiği kadar bilgi talep ettiğim insanlardan bilgiyi talep ederken istemeden de olsa incitmek istemem. :roll:


ben paradox tablolarla çalışıyorum. verdiğiniz SQL kodu çalışmadı. month kelimesi için geçersiz kelime hatası verdi.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Paradox SQL fonksiyonları hakkında pek bilgim yoktur fakat önerim kodla toplaman olacak.

Kod: Tümünü seç

var Aylar:array of [1..12] Real;
  i:Integer;
  Yil , Ay, Gun:Word;
begin
  for i:=1 to 12 do Aylar[i]:=0;
  Tbl.First;
  while nor Tbl.Eof do begin
    DecodeDate(TblTarih.AsDateTime, Yil , Ay, Gun);
    Aylar[Ay]:=Aylar[Ay]+TblTutar.AsFloat;
    Tbl.Next;
  end;
end;
//Aylar dizisinde toplamlar var...
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
adnansirca
Üye
Mesajlar: 135
Kayıt: 14 Kas 2005 12:24

Mesaj gönderen adnansirca »

İyi çalışmalar.
Ben bir projemde böyle bir işlem yapmıştım.
Döngü ile tablodan aldığınızda yavaşlama olabilir ya da program kesilebiliyor.
Çözümü ise şu şekilde buldum.
Veritabanımda aylar isminde bir master ve hareketler isminde bir detail tablo oluşturup Sum fonksiyonu ile toplamları mastera aktardım. Daha sonra masterdaki alanlar ve detaildeki alanlar için cxGrid de iki adet level ve dbwiev ile halletim. cxGrid bu iş için iyi bir çözüm. Master-Detail diye aratırsanız bununla ilgili bir çok mesaj forumda mevcut.
akuyumcu63
Üye
Mesajlar: 386
Kayıt: 02 Tem 2007 09:43

Mesaj gönderen akuyumcu63 »

SQL komutlarıyla filitreleme yaparak hesaplatılsa daha sağlıklı olur diye düşünüyorum,


sabanakman;
select month(EvrakTar), sum(tutar) from cekler group by month(EvrakTar)

yukarıdaki kodda "month" komutunu çalıştıramadık. 2 adet datetimepicker ile iki tarih aralığını filitreleyip hesaplatabiliyoruz ancak, otomatik olarak belli bir aya ait kayıtları çığıran yada filitreleyen bir fonksiyon almalı diye düşünüyorum.

sayin adminlerim lütfen bu konuya bir el atın;

kolay gelsin,
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Adminlerin gücü adınaaa :!: Paradox'u bırak :twisted:
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
adnansirca
Üye
Mesajlar: 135
Kayıt: 14 Kas 2005 12:24

Mesaj gönderen adnansirca »

Hocam ben cxGrid de ısrar ediyorum. Sebebi de şu;
Biliyorsunuz bileşenin DataController kısmında FooterSumary yordamı mevcut.
Projede kullanımı ise şöyle olabilir.

Öncelikle master detail ilişki kurup sonra da her bir detail dbTableView in FooterSumary kısmında toplam bakiye gösterilir.

Hem görünüş itibari ile hem de işlem azlığı nedeniyle daha güzel olacağını düşünüyorum.

ama elinizde bu bileşenler yok diyelim.
o zaman da kodla yapmak zorunda kalacaksınız tabiki.
Burada fonksiyon kullandığınızda month gibi veritabanına bağlı olarak karşınıza ayrı sorunlar çıkacaktır. Bu durumda ben genelde alan toplamını yeni bir değer vererek editlere aktarıyorum.
Yani

Kod: Tümünü seç

'SELECT SUM(AlanA) AS AlanAToplam,Ay,AyNo FROM TabloA WHERE AyNo = '''+edtAy.Text+'''';
//akabinde tabloyu aktif et ve....
Edit1.Text :=  TabloADBAlanAToplam.Value;//Durumu göre çevirme yapılır.

Bu mantığın daha uygun olacağı kanaatindeyim.
Başarılar
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

sabanakman yazdı:Adminlerin gücü adınaaa :!: Paradox'u bırak :twisted:
:N) :N) :N) :N)
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

akuyumcu63 yazdı: sabanakman;
select month(EvrakTar), sum(tutar) from cekler group by month(EvrakTar)

yukarıdaki kodda "month" komutunu çalıştıramadık.
Daha önce localsql helpinden faydalanarak bir soruya cevap vermiştim. Orda verdiğim örnek şu şekildeydi.

Kod: Tümünü seç


procedure TForm1.Button1Click(Sender: TObject);
begin
     QUERY1.CLOSE;
     QUERY1.SQL.Clear;
    QUERY1.SQL.Add('SELECT * FROM OZCANK ');
    QUERY1.SQL.Add(' WHERE EXTRACT(MONTH FROM TARIH)=EXTRACT(MONTH FROM CAST(:BUGUN AS DATE ))');
    QUERY1.SQL.Add(' AND  EXTRACT(YEAR FROM TARIH)=EXTRACT(YEAR FROM CAST(:BUGUN AS DATE ))');
   QUERY1.ParamByName('BUGUN').AsDate:=DATE;
     QUERY1.Open;

end;

Yani sql kısmında paradox için EXTRACT deyimi ile tarihi parçalayabilirsiniz.

O konu ile ilgili olarak viewtopic.php?t=13983&postdays=0&postor ... t&start=15
linkine bakabilirsiniz.
İyi çalışmalar.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
akuyumcu63
Üye
Mesajlar: 386
Kayıt: 02 Tem 2007 09:43

Mesaj gönderen akuyumcu63 »

paradox u bırakacağım, elimdeki projeyi bitirdikten sonra. bu benim ikinci projem.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Aslında @ofenX'in verdiği metodu araştırıp ondan sonra sql ile olmaz demem gerekirdi :oops: . Kendisi bize bunu hazır olarak sunduğu için dayanamayıp sql ile

Kod: Tümünü seç

select month(EvrakTar), sum(tutar) from cekler group by month(EvrakTar)
kodunu

Kod: Tümünü seç

select Extract(month from EvrakTar), sum(tutar) from cekler group by Extract(month from EvrakTar)
koduna çevrilince çalışıp çalışmayacağını denedim ama malesef Paradox bu konuda çok zayıf kalmış. group by olarak alan ismi istemekte ısrar ettiğinden aylara göre grup yapmaya olanak sağlamadı.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
akuyumcu63
Üye
Mesajlar: 386
Kayıt: 02 Tem 2007 09:43

Mesaj gönderen akuyumcu63 »

sayın sabanakman;

ilgi ve alakan için çok teşekkür ederim. seni yordum hakkını helal et. Allah zihin açıklığı versin.
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

tarih değerleri konusunda sql fonksiyonları yetersiz kalıyorsa yılı 400 ayı 32 işe çarpıp toplayın ve gunu ekleyin...

ben bir suru işte bunu formulize edip kullanıyorum (as400 boyle manyak etmişti beni)
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Evet haklısınız. Localsql helpinde
Note Derived values (calculated fields) cannot be used as the basis for a GROUP BY clause.

Column references cannot be passed to an GROUP BY clause via parameters.
şeklinde yazıyor. Boşuna sizi uğraştırdık. Kusura bakmayın. :oops:
İyi çalışmalar.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Cevapla