Firebird kullanım

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Belki de tüm tabloyu kapsayan bir cursor oluşturuyor sadece.. yani tüm kayıtları istemci/client tarafa çekmek sözkonusu olmuyor :?:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Ottoman

Mesaj gönderen Ottoman »

Evet hocam...bencede. çünkü aksi olsa trafik iyice karışır.
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

Ottoman yazdı:
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ı)

10-12 tabloluk bir vt var.Bir tablosuna ise test amaçlı veriler girdim.
Blob Alan yok.En fazla yer tutan alanım Varchar(500) ve bunlardan 5-6 tane var.
Toplam alan sayısı25.Bunların 3-4 tanesi integer,2-3 tanesi Date, 2-3 tanesi double.1 tane primary key, bir tane index var.
Tabloya 300.000 kayıt girdim.
PC özellikleri P4 2,8 İşlemci 1 GB ram Firebird Server 1.5 SuperServer var.Ayarları Default.Lokalde denedim.Yani FirebirdServer ile Database ve istemci exe aynı pcde.25 alanın hepsini çekiyorum.

Kod: Tümünü seç

IBdataset1.open;//3 saniye de 

Kod: Tümünü seç

IBDataset1.FetchAll;//1 dakika
Bu durumda bir yerde hata yapıyoruz.Ama nerde?
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

NewMember yazdı:Bu durumda bir yerde hata yapıyoruz.Ama nerde?
Hatan falan yok. Olay aynen öyle zaten. Bu konu forumda defalarca gündeme geldi. Birkaç mesaj önce de ben belirttim. Helpine bakınca zaten FetchAll'la ilgili yeterli açıklama var. Yaptığı işlem belli. Nerelerde kullanılacağı belli.

Sonuçta hata yok. Senin testin doğrusu. Hele çok kullanıcılı sistemlerde çok daha trajik sonuçlar alınacaktır. Adamlar helpine yazmış FetchAll Cached Updates uygulamalarında kullanılır diye. Hayır ben illa her yerde kullanıcam dersen 3 saniye yerine beklersin 1 dakika. Hatta bu network ortamında olur 5 dakika. Artık kullanıcı formu aç dedikten sonra gider çayını alır içer varsa bir iki telefon görüşmesi yapar sonra gelir form açılmış.

Hele daha trajik durumlarda artık gider öğlen yemeğini yer gelir form açılmış.

Hatta daha trajik durumlarda mesai bitiminde basar tuşa ertesi gün geldiğinde form açılmış.

Hatta...

Neyse fazla uzatmayalım.

İyi çalışmalar.
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

Hakan Can yazdı:
NewMember yazdı:Bu durumda bir yerde hata yapıyoruz.Ama nerde?
Hatan falan yok. Olay aynen öyle zaten. Bu konu forumda defalarca gündeme geldi. Birkaç mesaj önce de ben belirttim. Helpine bakınca zaten FetchAll'la ilgili yeterli açıklama var. Yaptığı işlem belli. Nerelerde kullanılacağı belli.

Sonuçta hata yok. Senin testin doğrusu. Hele çok kullanıcılı sistemlerde çok daha trajik sonuçlar alınacaktır. Adamlar helpine yazmış FetchAll Cached Updates uygulamalarında kullanılır diye. Hayır ben illa her yerde kullanıcam dersen 3 saniye yerine beklersin 1 dakika. Hatta bu network ortamında olur 5 dakika. Artık kullanıcı formu aç dedikten sonra gider çayını alır içer varsa bir iki telefon görüşmesi yapar sonra gelir form açılmış.

Hele daha trajik durumlarda artık gider öğlen yemeğini yer gelir form açılmış.

Hatta daha trajik durumlarda mesai bitiminde basar tuşa ertesi gün geldiğinde form açılmış.

Hatta...

Neyse fazla uzatmayalım.

İyi çalışmalar.
Aslında dediklerine katılıyorum ve zaten bir kaç mesaj önce benzer şeyler yazdım.Burada
Bir hata yapıyoruz ama nerde
sorusunda biraz ironi vardır.
Çünkü @Ottoman kardeşimiz bu iki çağrının aynı saniyede (4 Sn) iş yaptığını yazmış.Elimde bu tür işlemler için hazırladığım bir db vardı ve test edip sonuçlarını yazdım.
Kolay gelsin.
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

Kod: Tümünü seç

procedure TFIBCustomDataSet.FetchAll;
var
  CurBookmark:String;
  iCurScreenState:Integer;
begin
  ChangeScreenCursor(iCurScreenState);
  try
    if FQSelect.Eof or not FQSelect.Open then
     Exit;
    DisableControls;
    DisableScrollEvents;
    try
      CurBookmark:= Bookmark;
      Last;
      Bookmark:= CurBookmark;
    finally
      EnableControls;
      EnableScrollEvents;
    end;
  finally
   RestoreScreenCursor(iCurScreenState);
  end;
end;
Ottoman

Mesaj gönderen Ottoman »

Ben sizin nasıl bir VT, tablo yapısı hazırladığınızı bilemiyorum, (daha öncede dediğim gibi bilinçli kullanılırsa)fakat Bir firmada 10 (7=XP,3=Win,2000)terminalli sistemlerde şu an kullanılıyor. ve Genelde Network Ağında)her proğramımda kullanıyorum.benim proğramlarımda hiç bir problem yaşamadım.tıkır tıkır çalışıyor.....Herkesin görüşü.farklıdır...Sizde kullanmayınız!.Zannedersem Bilgi eksikliği var,iyi araştırmak lazım.(Sizin için.).

(Bir çok proğramlarımda var ama ,10 terminalli,proğramda
şu şekilde kullanıyorum;

Tablolar Aşağıdaki gibi açılıyor:

Kod: Tümünü seç

 IBDataSet1.FetchAll;//VT FetchAll'la açılıyor
 IBDataSet1.Last;//Liste son Kayıtta açılıyor. 
 //StatusBarla iligili komutlar 
//DBComboBox'larla ilgili komutlar.
vs...............
 .................
end;
Her Terminalde, DBGrid'de 12 satırlık liste.......
Her Terminal Toplam 120 Bileşen ve Araçlarla çalışıyor.Bu araçların (Sütunların)Toplam % 90'ı verilerle doluyor,Sütunlar 50 karakteri geçmiyor.

Herkese iyi çalışmalar.
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

Tablo Yapısı:

Kod: Tümünü seç

/******************************************************************************/
/***               Generated by IBExpert 30.11.2006 10:02:04                ***/
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES WIN1254;



/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/



CREATE TABLE HASTALAR (
    KAYITID             IDNO /* IDNO = NUMERIC(18,0) NOT NULL */,
    TCKIMLIKNO          NUMERIC(18,0),
    ADISOYADI           DMNAD /* DMNAD = VARCHAR(50) */,
    BABAADI             VARCHAR(20),
    DOGUMTARIHI         DATE,
    CINSIYET            VARCHAR(5),
    EVTEL               TEL /* TEL = VARCHAR(18) */,
    CEPTEL              TEL /* TEL = VARCHAR(18) */,
    ISTEL               TEL /* TEL = VARCHAR(18) */,
    KURUMU              VARCHAR(25),
    ADRES               ADRES /* ADRES = VARCHAR(250) */,
    KAYITTARIHI         DATE,
    KANGRUBU            VARCHAR(8),
    SIGARA              VARCHAR(5),
    OBEZITE             VARCHAR(5),
    ALKOL               VARCHAR(5),
    GECIRILMISHASTALIK  VARCHAR(500),
    GECIRILMISAMELIYAT  VARCHAR(500),
    KULLANDIGILACLAR    VARCHAR(500),
    DUSUNCELER          VARCHAR(2500),
    RESIMYOL            VARCHAR(500),
    MESLEK              VARCHAR(15),
    BOY                 VARCHAR(5),
    KILO                VARCHAR(5),
    BARKODNO            VARCHAR(25)
);




/******************************************************************************/
/***                              Primary Keys                              ***/
/******************************************************************************/

ALTER TABLE HASTALAR ADD CONSTRAINT PK_HASTALAR PRIMARY KEY (KAYITID);


/******************************************************************************/
/***                                Indices                                 ***/
/******************************************************************************/

CREATE INDEX INDXHASTAADSOYAD ON HASTALAR (ADISOYADI);
CREATE INDEX INDXTCKIMLIK ON HASTALAR (TCKIMLIKNO);


/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/


SET TERM ^ ;


/******************************************************************************/
/***                          Triggers for tables                           ***/
/******************************************************************************/



/* Trigger: HASTALARCHNG */
CREATE TRIGGER HASTALARCHNG FOR HASTALAR
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS
begin
  post_event 'HASTALARDEGISTI';
end
^


SET TERM ; ^



/******************************************************************************/
/***                               Privileges                               ***/
/******************************************************************************/

Yukarıda DDL i verilen tabloda 300.000 kayıt var.Diğer 12 tablo da ise kayıt yok bazılarında bir iki kayıt.Tabloların bir kaçında zatenparametrik bilgiler tutuluyor ve 2-3 kayıt var.Vs.........
Sistem ile ilgili bir sıkıntı olup olmadığı akla gelebilir.Tesadüf bilgisayar yeni formatlanmıştı.Yani sistemi kasacak bir olay yok.

Test, tamamlanmış bir exe ile yapılmadı.Yani arka planda bazı kodlar kastırıyormu, ya da exen belleği fazla işgal ediyormu sorusu akla gelmesin diye yazıyorum.(Yani free edilmeyen değişkenler ve devexpress component gibi kastıran şeyler yok.) Sıfırdan oluşturulan tek forma sahip bir exede yapıldı test.Ekranda sadece bir db grid ve dbgrid(Standart) 6 satırdan ibaret.

Bu arada yanlış anlaşılma olmasın.Amacımız doğru yöntemi bulmak.Ben her ne kadar FetchAll yapmak istemesemde ve de yapmasamda kullanıcı dbgridin scrollbarına bir yapıştımı al sana FetchAll oluyor.Biz doğru yöntemi öğrenmek zorundayız.Yada dbgrdi scrollbarı mı gizeriz ne yaparız artık :roll: :roll: :roll:

Herkese kolay gelsin.
Cevapla