| cempolat | 27.05.2005 - 13:03:38 |
| IBDataSet Aggregate Özelligi Varm1 Nasil Çalismakda.Bu konu Hakkinda arkadaslardan bilgi bekliyorum. | |
| gkimirti | 27.05.2005 - 14:48:33 |
| 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. | |
| cempolat | 31.05.2005 - 18:37:36 |
| 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. | |
| gkimirti | 01.06.2005 - 14:23:44 |
| 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 | |
| cempolat | 03.06.2005 - 10:42:49 |
| 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.. | |
| coderlord | 03.06.2005 - 11:39:56 |
| 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 | 03.06.2005 - 11:59:20 |
| 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. [u:f18824e1e5]select sum(kg) from tablom[/u:f18824e1e5] 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. | |
| coderlord | 03.06.2005 - 13:09:05 |
| 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 | 03.06.2005 - 13:29:21 |
| ç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. | |
| coderlord | 03.06.2005 - 13:50:03 |
| 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 | 03.06.2005 - 14:01:50 |
| 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. | |
| coderlord | 03.06.2005 - 14:18:10 |
| 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 | 03.06.2005 - 14:32:06 |
| 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. | |
| coderlord | 03.06.2005 - 14:47:01 |
| 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 | 03.06.2005 - 14:56:44 |
| 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. | |
| gkimirti | 03.06.2005 - 15:03:55 |
| ibdataset ile direkt olarak ib server a erisiyorsunuz. ibdatabase ile gerekli baglantıyı yapıp, ibdatasete uzerinde islem yapmak istediginiz tablo icin sql yazmak yeterli. Dataset Editorden Key alanı secip Update edilecek alanları belirliyor ve GenerateSQL ditorsunuz.
Benim hazırladıgım uygulamalar Datalar server da ona baglı clientlar tek program ile baglanıp islerini goruyorlar. Bahsettiginiz tarzda C/S uygulama hic hazırlamadım, bana sanki uzerinde degisiklik yapılması ve gelistirilmesi biraz zor gibi geldi Ne tur avantajları olabilir, izah edebilirmisiniz. | |
| coderlord | 03.06.2005 - 15:09:53 |
| Zaten client'da IB bileşenlerini kullanmayacaksın ki. Bunu server tarafında yapacaksın. Server'da çektiğin veriyi, client'a göndereceksin. Client tarafında da clientdataset kullanarak işi bitireceksin.
Umarım anlamışımdır. :) | |
| cempolat | 03.06.2005 - 15:13:28 |
| evet gelistirmesi biraz daha zor , ama bana sanki data ve data üzerinde yapilan islemlere daha hakimsin gibi geldi.Kullaniclarin Data Gönderdikleri bilgileri Server tarafinda filitre ederek Gercek .gdb ye yazmadan önce kontrol edebiliyorsun.Yetkilendirme yapalibiyorsun.
Bu Projeyi Hazirlamadan önce baya bir arastirma yaptim farkli internet sitelerinde C/S uygulamalarin gercek bir programda uygulanmasi gerektiginden bahsetiliyor , IBDataSet'de Böyle bir özellik yok diye biliyorum , yanlismiyim. | |
| coderlord | 03.06.2005 - 15:16:10 |
| Doğru. IBDataset C/S'yi destekleyecek özellikler sunmuyor. Tek amacı native bir şekilde FB/IB veritabanına ulaşmak. | |