Firebird kullanım

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

Hakan Can yazdı: Component seti olarak dbExpress kullan. Tablo (DataSet) olarak da TSimpleDataSet kullan.
simpledatasetin ne gibi artilari var acaba?
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

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;

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
begin
 IBDataSet1.FetchAll;
end;
bunu kullan Formunuza ,Listelediğiniz kadar kayıtı çeker!.

Ben IBX Bileşenlerinde hiç problem yaşamadım.! vede zevkle kullanıyorum.
Eğer fazla kayıt çekmesini istemiyorsanız bu komutu kullanmayın diycektiniz heralde. :?:
Ottoman

Mesaj gönderen Ottoman »

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.
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.)
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

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.
Ottoman

Mesaj gönderen Ottoman »

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?
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

sadettinpolat yazdı:
Hakan Can yazdı: Component seti olarak dbExpress kullan. Tablo (DataSet) olarak da TSimpleDataSet kullan.
simpledatasetin ne gibi artilari var acaba?
TSimpleDataSet dbExpress component setinde BDE'deki TTable ve TQuery'nin her ikisine karşılık geliyor. Aslında TClientDataSet'in dbExpress'e uyarlanmış hali.

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.
Ottoman

Mesaj gönderen Ottoman »

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.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Yanlışlık olmasın;

Kod: Tümünü seç

IBDataSet1.FetchAll;
tablodaki tüm kayıtları çeker :idea: Aksi halde gereken kayıtlar çekilir.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Ottoman

Mesaj gönderen Ottoman »

Ç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.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Şimdi benim de kafama takıldı :? Kursörün bulunduğu yerden itibaren mi yoksa tüm DataSet teki kayıtları mı getirir :?:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

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 :?:
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.

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.
Ottoman

Mesaj gönderen Ottoman »

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 ;
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.
Tek sakıncası bu!..Üstteki gibi.(güvenilirlik ve kullanışlılık)
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.)
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.!
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Cached Updates denilince farklı şeyler anlıyoruz anlaşılan. Cached Updates kullanılan uygulamalar için FetchAll tavsiye ediliyor. Ancak Cached Updates başlı başına farklı bir kullanım şekli.

Cached Updates aslında dbExpress mantığıdır.

İyi çalışmalar.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Benim takıldığım "kürsörun bulunduğu pozisyon" du. Hem zaten Open dan sonra kullandığımdan kürsör ilk kayıttadır :wink: Mesela tablodaki kayıt sayılarını (count) garanti etmek için kullanıyordum.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Ottoman

Mesaj gönderen Ottoman »

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.
Arabellekli Düzenlemeler (Cached Updates)Açıklaması bu!.

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.
Procedurleri Tablonuzun "OnCreate" olayında ayrı ayrı deneyiniz! (Tabloyu açıp kapayınız)Mesela ben 100.000 kayıtlık VT'de denedim,(test'e tuttum),aralarında hiç bir fark göremedim.(Hocamın dediği gibi Kursor ikisinde ilk kayıttaydı)
En son Ottoman tarafından 28 Kas 2006 11:17 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Cevapla