simpledatasetin ne gibi artilari var acaba?Hakan Can yazdı: Component seti olarak dbExpress kullan. Tablo (DataSet) olarak da TSimpleDataSet kullan.
Firebird kullanım
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
Eğer fazla kayıt çekmesini istemiyorsanız bu komutu kullanmayın diycektiniz heralde.Ottoman yazdı:Valla bende ne yapmak istediğinizi anlayamadım!!??.IBX Bileşenleri çok kullanışlıdır.IBTable yerine,IBDataSet kullanman daha elverişli olur, tabloya fazla kayıt çekmek istemiyorsanız ozaman;bunu kullan Formunuza ,Listelediğiniz kadar kayıtı çeker!.Kod: Tümünü seç
procedure TForm1.FormCreate(Sender: TObject); begin IBDataSet1.FetchAll; end;
Ben IBX Bileşenlerinde hiç problem yaşamadım.! vede zevkle kullanıyorum.

FetchAll Tüm kayıtları depolar ve saklar Listelemeğe hazır hale getirir,bilhassa Network trafihinde ,zorluk yaşanmaz çünkü istenilen kadar kayıt ,trafiğe girmeden,anında listelenir.(Veritabanı Her veri listelemesinde,tekrar tekrar taranmaz,çünkü hazırdır.)19) FETCHALL
Aktif kursörün olduğu pozisyondan itibaren dosyanın sonuna kadar olan tüm kayıtları getirir ve onları yerel olarak saklar.
procedure FetchAll;
Cachelenmiş güncellemeleri kullanırken network trafiğini düşürmek için kullanın. FetchAll ChecekBrowseMod' u yapılan değişiklikleri kaydetmek için kullanır. Sonra kursörün bulunduğu yerden itibaren tüm kayıtları çağırır ve saklar.
Genellikle cache güncellenmeler aktif edildiklerinde görüntülenecek bilgi kadar veri çağrılır. her yeni getirme olayı yalnızca okunabilir bir transaction başlatır. Transferleri sağlamlaştırmak ve network trafiğini azaltmak için uygulama fetchall çağrısını kullanır.
Haklısınızda o zaman şu durum meydana gelmeyecekmi?Diyelimki tablonuzda 1 milyon kayıt var.Cursor 5.kaydın üzerinde.Siz FetchAll yaptığınızda 999.995 kaydı Serverden Cliente çekmek isteyecek ve büyük ihtimalle de kitlenecektir.Ama kitlenmeden çekebilirse ondan sonra bahsettiğiniz serveri yormama mevzu bahis olcak belki.
Ancak soruyı soran arkadaşımız ise bilakis bu 999.995 kaydı naparsam cliente çekmem gibi bir kaygıda.
Eğer yanlış anlamadıysam.
Ancak soruyı soran arkadaşımız ise bilakis bu 999.995 kaydı naparsam cliente çekmem gibi bir kaygıda.
Eğer yanlış anlamadıysam.
999.995 kaydı bir anda listeleyemez!.Listelediği araç diyelimki DBGrid,;
DBGridde kaç satır gösterdiyse,999.995 kayıt okadar satır sırayla görüntülenecektir.ve kayıtlar depoda hazır olduğu için hiç zorluk çekmeyecektir.(Yani DBGridde 16 satır varsa ,onun göreceği 16 kayıttır.,Diğer şekilde de göreceği 16 kayıttır,ama bu sefer dosyalar depodan değil sorguya göre veritabanına sırayla tekrar tekrar gidip gelecektir.)
Şöylede düşünebiliriz! Meyva dolu bir ağaç ,her meyva yiyeceğin zaman,ağaca tekrar tekrar çıkmakmı daha kolay yoksa,bir seferde ağaçtan yiyebileceğin kadar meyvayı toplayıp oturup yemekmi?
DBGridde kaç satır gösterdiyse,999.995 kayıt okadar satır sırayla görüntülenecektir.ve kayıtlar depoda hazır olduğu için hiç zorluk çekmeyecektir.(Yani DBGridde 16 satır varsa ,onun göreceği 16 kayıttır.,Diğer şekilde de göreceği 16 kayıttır,ama bu sefer dosyalar depodan değil sorguya göre veritabanına sırayla tekrar tekrar gidip gelecektir.)
Şöylede düşünebiliriz! Meyva dolu bir ağaç ,her meyva yiyeceğin zaman,ağaca tekrar tekrar çıkmakmı daha kolay yoksa,bir seferde ağaçtan yiyebileceğin kadar meyvayı toplayıp oturup yemekmi?
TSimpleDataSet dbExpress component setinde BDE'deki TTable ve TQuery'nin her ikisine karşılık geliyor. Aslında TClientDataSet'in dbExpress'e uyarlanmış hali.sadettinpolat yazdı:simpledatasetin ne gibi artilari var acaba?Hakan Can yazdı: Component seti olarak dbExpress kullan. Tablo (DataSet) olarak da TSimpleDataSet kullan.
Artısı CachedUpdates mantığında çalışıyor olması diyebilirim. Ancak artımı eksimi tartışılır.
Ancak dbExpress kullanmaya karar verirseniz (Borland'ın tavsiyesine uyarak) sonuçta TSimpleDataSet kullanmak zorunda kalıyorsunuz. Gerçi alernatifi de var ama üç tane componenti birarada kullanmanız gerekiyor.
Benim daha doğrusu firmanın dbExpress'i tercih etmesinin nedeni Borland'ın BDE'yi artık desteklemeyeceğini ilan etmesi ve yerine de dbExpress'i tavsiye etmiş olması. Tabi bu aslında çok önemli bir tavsiye. Bence gözardı etmemek lazım.
Bunu tercih etmemizin diğer bir nedeni de (belki de asıl nedeni) veritabanından bağımsız yazılım gerçekleştirme gayretimiz. IBX component seti sonuçta sadece InterBase ve FireBird'e hitap ediyor ve bu maalesef iş dünyasında yazılımcı açısından çok büyük sorunlarla karşılaşabilme anlamına geliyor. Biz fazlasıyla karşılaştık. Zira FireBird deyince çoğu bilgiişlemci direk muhalefet ediyor, başlıyor Oracle vs. demeye. Gelde anlat anlatabilirsen. Büyük firmalar için veritabanının bedava olması pek birşey ifade etmiyor. Oracle olsun MS-SQL olsun artık onlar da ücretsiz kısıtlı sürüm çıkartıyorlar zaten. Sonuçta onlar da hemen hemen bütün firmalara hitap ediyorlar.
İyi çalışmalar.
VT yapısı sağlıklı olmadıktan sonra her VT'de problem yaşarsınız! Örnek;Ben Oracle'de ,SQL Server'de ki problem yüzünden'ki( Sağlıklı yapı oluşturalamadığı için,verdimi çözülemeyecek hata veriyor),Bilgisayarlarını camdan atanları duydum. o yüzden...
Derimki Bunların içinde en Kullanışlısı,en iyisi Firebird 'dir derim.Çok sağlam bir VT'dir.Yedek Almanız bile gerekmez!.yaptığım tüm proğramlar hatasız çalışıyor.!!
Yoğurt yiyenin,Kılıç Kuşanandır.
Derimki Bunların içinde en Kullanışlısı,en iyisi Firebird 'dir derim.Çok sağlam bir VT'dir.Yedek Almanız bile gerekmez!.yaptığım tüm proğramlar hatasız çalışıyor.!!
Yoğurt yiyenin,Kılıç Kuşanandır.
Yanlışlık olmasın; tablodaki tüm kayıtları çeker
Aksi halde gereken kayıtlar çekilir.
Kod: Tümünü seç
IBDataSet1.FetchAll;

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Çok doğrusun hocam! ilk açılışta,tüm kayıtları VT'den çekip saklar!sonrada biz istediğimiz kadarını(yani sorguyla olmuşlardan gideriz) Tabloda listeleriz! ben onu anlatmak istiyorum!
19) FETCHALL
Aktif kursörün olduğu pozisyondan itibaren dosyanın sonuna kadar olan tüm kayıtları getirir ve onları yerel olarak saklar.
procedure FetchAll;
Cachelenmiş güncellemeleri kullanırken network trafiğini düşürmek için kullanın. FetchAll ChecekBrowseMod' u yapılan değişiklikleri kaydetmek için kullanır. Sonra kursörün bulunduğu yerden itibaren tüm kayıtları çağırır ve saklar.
Genellikle cache güncellenmeler aktif edildiklerinde görüntülenecek bilgi kadar veri çağrılır. her yeni getirme olayı yalnızca okunabilir bir transaction başlatır. Transferleri sağlamlaştırmak ve network trafiğini azaltmak için uygulama fetchall çağrısını kullanır.
Hocam helpinde gayet açık yazıyor. Aslında aynı şey sonuçta tablo açıldığında zaten başta oluyor. Yalnız FetchAll CachedUpdates uygulamaları için tavsiye ediliyor. Yoksa diğerleri yani normal uygulamalar için değil. Bu da çok önemli bir nokta. Yanlış anlayıp sonra verilen örnekteki gibi 1 milyon kayıt için durduk yerde 5 dakika beklemenin bir anlamı yok. Çok kullanıcılı sistemlerde ve büyük veritabanlarında belki de hiç kullanmamak gerekebilir.rsimsek yazdı:Şimdi benim de kafama takıldıKursörün bulunduğu yerden itibaren mi yoksa tüm DataSet teki kayıtları mı getirir
Kod: Tümünü seç
TIBCustomDataSet.FetchAll
Retrieves all records from the current cursor position to the end of the file and stores them locally.
procedure FetchAll;
Description
Call FetchAll to reduce network traffic when using cached updates. FetchAll calls CheckBrowseMode to post any pending changes, and then retrieves all records from the current cursor position to the end of the file, and stores them locally. Ordinarily when cached updates are enabled, a transaction retrieves only as much data as it needs for return purposes.
Note: Using FetchAll is not always appropriate. For example, when an application accesses a database used by many simultaneous clients and there is a high degree of contention for updating the same records, fetching all records at once may not be advantageous because some fetched records may be changed by other applications. Always weigh the advantages of reduced network traffic against the need for reduced record contention.
İyi çalışmalar.
Hakan can kardeşim,eklediğin ingilizce metin benim türkçe alıntımdır.
Tabloyu "IBDataSet1.Open;" ile IBDataSet1.FetchAll;" arasında açmak ikisinin arasında şu farkı doğurur! "Open" veriyi kullanmak için açar! "FetchAll" ise yazdığı gibi tüm kayıtları getirir ......ama saklar,(Geçici bir hafıza gibi düşünün).(Ama bu demek değildirki 1000.000 kayıtı bekliyeceğiz,Bir köprü gibi düşünün VT'den veri çekme bizim elimizde),Genelde Network ortamlarında kullanılır.
Ama ben tüm VT'lerde bu proceduru kullanırım ,hiç bir yavaşlama yok aksine rahatlama var ,Ha Benim türkçe,Arkadaşın ingilizce alıntısında belirtildiği gibi ;
Tabloyu "IBDataSet1.Open;" ile IBDataSet1.FetchAll;" arasında açmak ikisinin arasında şu farkı doğurur! "Open" veriyi kullanmak için açar! "FetchAll" ise yazdığı gibi tüm kayıtları getirir ......ama saklar,(Geçici bir hafıza gibi düşünün).(Ama bu demek değildirki 1000.000 kayıtı bekliyeceğiz,Bir köprü gibi düşünün VT'den veri çekme bizim elimizde),Genelde Network ortamlarında kullanılır.
Ama ben tüm VT'lerde bu proceduru kullanırım ,hiç bir yavaşlama yok aksine rahatlama var ,Ha Benim türkçe,Arkadaşın ingilizce alıntısında belirtildiği gibi ;
Tek sakıncası bu!..Üstteki gibi.(güvenilirlik ve kullanışlılık)NOT: Bu çağrıyı yapmak network ortamında aynı anda birden fazla kullanıcının aynı kayda ulaşmaya çalışması ve değişiklik yapmak istemesi yüzünden güvenilirlik ve kullanışlılık açısından sakıncalıdır.
yani bu kısmıda açalım"her yeni getirme olayı yalnızca okunabilir bir transaction başlatır" diyor yani biz ne kadar çok veri getirmede, sorguda VT'ye gidersek" transaction"'un sürekliliğinden bahsediyor.("FetchAll" ise bir seferde getirir.)Yani bu komuttan korkmayalım.!Genellikle cache güncellenmeler aktif edildiklerinde görüntülenecek bilgi kadar veri çağrılır(Burası normal kullanım). her yeni getirme olayı yalnızca okunabilir bir transaction başlatır. (Transferleri sağlamlaştırmak ve network trafiğini azaltmak için uygulama fetchall çağrısını kullanır.)(FetchAll'ın esas amacı burada.)
Arabellekli Düzenlemeler (Cached Updates)Açıklaması bu!.Arabellekli Düzenlemeler (Cached Updates)
Arabellekli düzenlemeler (Cached Updates) konusunun amacı BDE tabanlı veri kümeleri ile arabellekli düzenlemelerin kullanımı hakkında bilgi vermektir. Aynı zamanda ara bellek kullanımı avantaj ve dezavantajları, ana/detay (Master/Detail) yapı ile ara bellek kullanımı ve TUpdateSQL bileşeni hakkında geniş açıklamalarda bulunulmuştur. anlatım örnek uygulamalarla desteklenmiştir. Kitaptan bir paragraf:
"Arabellekli düzenlemelerin temel amacı işlem grubu (Transaction) süresini ve çok kullanıcılı ortamlarda ağ trafiğini azaltmaktır. Buna rağmen gerçek zamanlı uygulamalarda bu özelliğin kullanılması uygun olmayabilir.
Arabellekli düzenlemeler kullanıldığında veriye yapılan değişiklikler lokal olarak ara bellekte tutulmakta ve veri tabanına bu değişiklikler gönderilmemektedir.
Doğru! ama "Procedure FetchAll" Tüm VT'Bileşenlerinde mevcuttur.ve kullanılabilir.(Tabi bilinçli olarak!)
Kod: Tümünü seç
IBDataSet1.FetchAll;//Açılma süresi 4 saniye.
......................................
IBDataSet1.Open;Açılma süresi 4 saniye.
En son Ottoman tarafından 28 Kas 2006 11:17 tarihinde düzenlendi, toplamda 1 kere düzenlendi.