IBDataSet Aggregate

C, C++ ve C++ Builder ile ilgili konuları buraya yazabilirsiniz.
cempolat
Üye
Mesajlar: 31
Kayıt: 27 May 2005 12:56

IBDataSet Aggregate

Mesaj gönderen cempolat »

IBDataSet Aggregate Özelligi Varm1 Nasil Çalismakda.Bu konu Hakkinda arkadaslardan bilgi bekliyorum.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

Aggregate ile kastettiginiz nedir? gruplama mı?
ibdataset zaten sql cumlecikleri yazılarak kullanılan bir bilesen, kendin de bu tarz bir ozellik yok ,
ancak Select SQL cumleleri ile yapılabilen herseyi yapabilir.
ÜŞENME,ERTELEME,VAZGEÇME
cempolat
Üye
Mesajlar: 31
Kayıt: 27 May 2005 12:56

IBDataSet Aggregate

Mesaj gönderen cempolat »

IBClientDataSet sum(kg) yazarak , Toplam Aliyordum. IBClientDataSet ile bu isi sorunsuz yapabiliyordum.

Tam olarak Yapmak Istedigim:
hem toplam alip hemde toplam aldigim kayitlari dbgrid içinde gösteriyordum.

bu konu hakkinda bilgisi olan arkadaslardan yardimlariniz bekliyorum.
forum kurallarini okudum , gerekli kurullara uyacagim ama biraz acemilik var kusara bakmayin.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

yapmak istediginiz satır satır kayıtların yanında ayrı bir sutun halinde bir sutunun toplamı mı?
select alan1,alan2,(select sum(kg) from tablom) from tablom
bunun gibi bir sey isinizi gorurmu
ÜŞENME,ERTELEME,VAZGEÇME
cempolat
Üye
Mesajlar: 31
Kayıt: 27 May 2005 12:56

IBDATASET 'de yapmak istedigim..

Mesaj gönderen cempolat »

tesekkurler ,,, ama benim yapmak istedigim takip eden toplamlar degil.
tek ve net bir toplam.

öRNEK : asagida dbgrid içinde gözükmesi gereken listesini verdim.

Toplam ' in dgrid içinde gözükmesi önemli degil ,
önemli olan bunlarin hepsini bir IBDATASET 'de yapmak istiyorum.


KODU---ADI------KG
10.10 BOYA 150,00
10.11 BOYA 200,00
10.12 BOYA 250,00
10.13 BOYA 550,00

TOPLAM : 1.1150 KG

Bu konu ile bilgisi olan arkadaslari bekliyorum..
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

gkimirti gayet güzel bir yöntem sunmuş. Verdiği SQL ile grid'ini doldurursun. Daha sonra alta bir DBText atıp Field'ını "sum of kg" verirsin. Grid'e çift tıklayıp görünmesini istemediğin (burada toplam kg oluyor) silersin. ve istediğin gerçekleşir.
cempolat
Üye
Mesajlar: 31
Kayıt: 27 May 2005 12:56

Mesaj gönderen cempolat »

yöntem Güzel ama çok yavas.

benim tablomda 850.000 kayit var.

bu yöntemle Tamaminin toplamini alindigimda
select alan1,alan2,(select sum(kg) from tablom) from tablom
makine tikaniyor.

select sum(kg) from tablom yöntemiyle aldigimda. hiz artiyor ama yeterli degil.

Aggregate yöntemini IBClientDataset Kullandigimda gayet güzeldi.

Not: 850.000 kayit her birinin pesinden toplam gelmesi bana göre yanlis.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

O zaman calculated field ile genel toplamı hesaplatma yoluna gidebilirsin.

Yanlış olduğun bir nokta daha var. 850 bin kaydı neden bir seferde çekiyorsun? Gereği nedir? Kullancıya bir filtre sunup işine yarayanları çekmen daha doğru bir yaklaşım.
cempolat
Üye
Mesajlar: 31
Kayıt: 27 May 2005 12:56

Mesaj gönderen cempolat »

çok dogru 850.000 kayit bir anda almak gereksiz ve client/server kuralina aykiri.

Ama program gelistirdigim firmanin 1 aylik üretim girislerin toplami 850.000 bin almassa bile 500.000 kadar kayit var.

Bu gibi bir durumda 6 aylik bir rapor istenildiginde
(örn. 6 aylik boya harcamasi nedir ? ) sadece toplama ihtiyacim oluyor , grid icinde göstermesem bile toplam sart). simdilik cözüm procedure
ama ilginçtir IBClientDataSet Bunu Çok KISA Bir sürede yapiyor.

IBDataSet ile IBClientDataSet arasindaki bu fark nedendir.

Sizce IBDataSet 'mi IBClientDataSet
IBClientDataSet 'le ben fazla ugrasmadim ama kullandigim kadariyla IBDataSet Yaptiklarin tamamini yapiyor.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Bildiğim kadarıyla clientdataset'ler bütün veriyi connect esnasında fetch edip, gerekli hesaplama işlemlerini içsel olarak bellekte yaparlar. Hız farkı bundan kaynaklanıyor sanırım. Ancak ilk connect esnasında hiç bekleme yaşamadınız mı bunu merak ettim.
cempolat
Üye
Mesajlar: 31
Kayıt: 27 May 2005 12:56

Mesaj gönderen cempolat »

evet connet essasinda çok ciddi bir bekleme söz konusu ama baglantidan sonra datalar havada uçusur gibi hizli , fakat PacketRecortd özelligini -1 birden örn: 100 veya 10 veya 1 yaptigin zaman IBDataSet Hizina Ulasiyor.
Süreler :
850.000 kayit..
2 sn tamami ekrana geliyor.
Aggregates özelliginde ki herhangi bir islem varsa buda hesaplanarak
Göstermis Oldugun fieldbyname özelligine geliyor.

Mesala Bir grid icinde 150 kayit var. TOPLAMLAR HESAPLANMIS BIR SEKILDE fieldbyname geliyor , ben bu grid üzerinde bir filitre çalistiriyorum örn: adi = cem 'dedigimde herhangi bir islem yapmam gerek kalmadan toplam otomatik aliniyor.

IBDATASET Bu islemdi yapamadim Sorun'da aslinda bu galiba.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Bildiğim kadarıyla Delphi 7'de ibclientdataset yok. Siz de bunu kullanmak istiyorsunuz. Yanlız clientdataset bütün veriyi ram'e fetch ettiği için fazla kayıtta ciddi bir ram tüketimi ortaya çıkabilir. Bunu packetrecord propertysini değiştirerek fetch edeceği satır miktarını ayarlayarak aşabilirsiniz belki, ancak o zaman da dediğin gibi IBDataset'ten pek de bir farkı kalmaz.

Bunu aşabilmenin 3 yolu var. Tercih sırama göre:

1-Server tarafında bir view veya SP oluşturarak toplamı almak.
2-IBDataset'i FetchAll yapıp, toplamı bellekte calculatedfield ile oluşturmak.
3-ClientDataset kullanıp bunu DatasetProvider ile IBDataset'ine bağlamak.
cempolat
Üye
Mesajlar: 31
Kayıt: 27 May 2005 12:56

Mesaj gönderen cempolat »

toplamlar bir sekilde halletminin yollari farkli sekillerde bulabiliyoruz fakat

Client / Server Mimarisi.
Benin bir önceki projelerimde 1 server / 1 client vardi.Simdi IBDataSet ile bu yöntemi uygulayamadim. DCOM kullaniyordum.

Orn: ClientDataSet1 remoteserver özelligine server dosyasini bulundugu
yeri göstererek baglanti kuruyordum , ama birde server için program yazmam gerekiyordu.Server 'programinda her türlü canli sorgulari yaratarak client'e ClientDataSet1.ProviderName özelligiyle aliyordum.

Bu Tip Uygulamalarda Hiç Bir problemin yoktu.

IBDataSet Gecince :
1- SERVER programina gerek kalmadi gibi gözükdü. DOGRUMUDUR sizce.

Böyle Bir uygulama yaptinizmi yaptiysaniz dogru olan uygulama size göre hangisidir.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

C/S kullanmanızı gerektirecek bir proje ise briefcase model denilen bu yöntemi uygulamanız her zaman en doğrusu. IBDataset'i Server tarafında uygularsınız.

IBDataset'e geçerek neden bundan kurtulabileceğini düşündün burasını anlamadım.
cempolat
Üye
Mesajlar: 31
Kayıt: 27 May 2005 12:56

Mesaj gönderen cempolat »

belki ben yapiyi tam olarak anlayamadim , yada anlatmak istedigimi anlatamadim.

ClientDataSet ' Componettinde server bulundugu yeri girebilecegim bir combobox var IBDataSet'de Bu Yok, provider taniticagim bir yer yok.

Ama Master/Detial combobox Yok diyebilirsin.

Server programin oldugu yeri nasil tanitacagim. DCOM IBDataSet'le birlikte kullanamiyorumki.
Cevapla