S.A. Arkadaşlar,
Yaptığım programda datasetleri ve datasource leri bir datamudül(name:data) içinde tutuyorum.
Datamodülün içinde;
CARI_MASTER
CARI_DETAIL
STOK_MASTER
STOK_DETAIL
FATURA_MASTER
FATURA_DETAIL
gibi tablolarım var.Programda ana formu ve bu datamodülü AutoCreate ediyorum, diğerleri manuel create edilip kapatılıyor.
Yukarıdaki MASTER tabloları datamodülün Create olayında open yapıyorum.MASTER tabloların DETAIL lerini de MASTER tabloların After Open ınında açıp Before Close unda da Close yapıyorum.,
Ama bu durumda bütün datasetler open oluyor.
Yapmak istediğim kullanılacak datasetin sadece gerektiğinde open olması ve işlevi bittikten sonrada Close edilmesi.Bunu formun Createsine yada Active sinde yapsam sanırım formun açılışı yavaşlar(veriler fazlalaşınca).
Bu konuda sizlerin tecrübelerine ihtiyacım var.Eğer hepsi open olursa program çok yavaş işleyecek gibi geliyor bana.
Datasetlerin Kontrolü
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Datasetlerin Kontrolü
"Bilginin Doruğuna Hep Birlikte..."
Buna bir çok alternatif çözüm üretebilirsiniz.
Öncelikle ben şahsen bütün tabloların bütün verilerinin açılmasının doğru olmadığını düşünüyorum. Zira kayıt sayıları milyonlara ulaştığında artık tuşa basıp arada öğlen yemeğine gitmek veya çay molası vermek zorunda kalabilirsiniz.
Tabi burada kullandığınız component grubu da önemli. BDE, dbExpress, IBX, ADO vs. Bence bunlardan da önemlisi örneğin BDE kullanıyorsanız DataSet olarak TTable mı TQuery mi kullanıyorsunuz? Ekstra component (örneğin QuantumGrid) kullanıyor musunuz?
Bu sorulara vereceğiniz cevaplara göre alternatif çözümler önerilebilir.
Ben şahsen dbExpress, TSimpleDataSet (TQuery mantığıyla) ve QuantumGrid kullanıyorum ve DataSet'leri yeri geldiğinde (örneğin forma girişte) açıyorum. Eğer başka bir DataSet'le bir işim olursa önce o DataSet'in açık olup olmadığını kontrol ediyor ve değilse açıyorum.
Size önereceğim bir yöntem TTimer kullanmanız olacak. Burada her OnTimer'da örneğin bir DataSet'i açarsınız. Böylelikle kullanıcı normal işlerini yaparken arada DataSet'ler açılmış olur. Tabi burada kullanıcı bir forma girdiğinde eğer o formda kullandığı DataSet varsa onların açılıp açılmadığının kontrolünü yapmanız gerekecektir.
Bütün tabloların başta açılması ancak bu ve benzeri bir şekilde kullanıcıya fazla rahatsızlık vermeden sağlanabilir.
Ancak kullanacağınız component grubunu vs. başta çok iyi belirlemelisiniz.
İyi çalışmalar.
Öncelikle ben şahsen bütün tabloların bütün verilerinin açılmasının doğru olmadığını düşünüyorum. Zira kayıt sayıları milyonlara ulaştığında artık tuşa basıp arada öğlen yemeğine gitmek veya çay molası vermek zorunda kalabilirsiniz.
Tabi burada kullandığınız component grubu da önemli. BDE, dbExpress, IBX, ADO vs. Bence bunlardan da önemlisi örneğin BDE kullanıyorsanız DataSet olarak TTable mı TQuery mi kullanıyorsunuz? Ekstra component (örneğin QuantumGrid) kullanıyor musunuz?
Bu sorulara vereceğiniz cevaplara göre alternatif çözümler önerilebilir.
Ben şahsen dbExpress, TSimpleDataSet (TQuery mantığıyla) ve QuantumGrid kullanıyorum ve DataSet'leri yeri geldiğinde (örneğin forma girişte) açıyorum. Eğer başka bir DataSet'le bir işim olursa önce o DataSet'in açık olup olmadığını kontrol ediyor ve değilse açıyorum.
Size önereceğim bir yöntem TTimer kullanmanız olacak. Burada her OnTimer'da örneğin bir DataSet'i açarsınız. Böylelikle kullanıcı normal işlerini yaparken arada DataSet'ler açılmış olur. Tabi burada kullanıcı bir forma girdiğinde eğer o formda kullandığı DataSet varsa onların açılıp açılmadığının kontrolünü yapmanız gerekecektir.
Bütün tabloların başta açılması ancak bu ve benzeri bir şekilde kullanıcıya fazla rahatsızlık vermeden sağlanabilir.
Ancak kullanacağınız component grubunu vs. başta çok iyi belirlemelisiniz.
İyi çalışmalar.
Ben component olarak Db nesnelerini ve Datasetleri kullanıyorum.
Yukarıda anlattığım şekilde open ediyorum.
Benim asıl merak ettiğim formun createsi ne yada activesinde kullanılacak dataseti open etmek doğru olur mu?datada veri artınca formun createsinde open old. dan formun açılışı yavaş olabilir mi?
Genel bir kullanım şekli yazabilirseniz çok sevinirim.
Hayırlı çalışmalar...
Yukarıda anlattığım şekilde open ediyorum.
Benim asıl merak ettiğim formun createsi ne yada activesinde kullanılacak dataseti open etmek doğru olur mu?datada veri artınca formun createsinde open old. dan formun açılışı yavaş olabilir mi?
Genel bir kullanım şekli yazabilirseniz çok sevinirim.
Hayırlı çalışmalar...
"Bilginin Doruğuna Hep Birlikte..."
Asıl konuyu unuttuk. Kullandığınız veritabanı. Eğer Paradox kullanıyorsanız tabloları nerede açtığınız hiç sorun değil. Tabloların büyüklüğü de hiç sorun değil (TTable için söylüyorum). İstediğiniz yerde istediğiniz kadar tabloyu açabilirsiniz.
Ama FireBird/MS SQL/Oracle vs. kullanıyorsanız o zaman tablolar büyüyünce hızla ilgili ciddi sorunlar yaşayabiliyorsunuz. O zaman nerede açtığınızdan daha ziyade daha önceki yazımda belirttiğim hususları değerlendirmelisiniz.
İyi çalışmalar.
Ama FireBird/MS SQL/Oracle vs. kullanıyorsanız o zaman tablolar büyüyünce hızla ilgili ciddi sorunlar yaşayabiliyorsunuz. O zaman nerede açtığınızdan daha ziyade daha önceki yazımda belirttiğim hususları değerlendirmelisiniz.
İyi çalışmalar.
Ben genelde ya formu açan butondan tabloyu açıyorum yada formun create'inde.
Şu şekilde mesela
Çok fazla bi yavaşlamaya neden olacağını sanmıyorum. Ama ciddi boyutlarda bilgi var ise o zamanda daha farklı alternatifler düşünülebilir.
Mesela ilk anda belli sayıda kayıt getirili sonra sın da diğer kayıtlar çağırılabilir. Veya arada bi dialog ekranı koyularak işlem süreci gösterilebilir.
Ama genel uygulamalar için standart kayıt sayılarının bi kaç bin olduğu zamanlar da pek bi yavaşlama olacağını sanmıyorum.
Şu şekilde mesela
Kod: Tümünü seç
procedure Tfr_main.bt_acClick(Sender: TObject);
begin
if Assigned(fr_carihrk) then fr_carihrk.Close;
application.CreateForm(Tfr_carihrk,fr_carihrk);
md.ds_carihrk.Close;
md.ds_carihrk.SelectSQL.Clear;
md.ds_carihrk.SelectSQL.Add('select * from carihrk');
md.ds_carihrk.Open;
end;
// yada oncreate olayında
procedure Tfr_cek.FormCreate(Sender: TObject);
begin
md.ds_cek.Close;
md.ds_cek.SelectSQL.Clear;
md.ds_cek.SelectSQL.Add('select * from cek');
md.ds_cek.Open;
end;
Mesela ilk anda belli sayıda kayıt getirili sonra sın da diğer kayıtlar çağırılabilir. Veya arada bi dialog ekranı koyularak işlem süreci gösterilebilir.
Ama genel uygulamalar için standart kayıt sayılarının bi kaç bin olduğu zamanlar da pek bi yavaşlama olacağını sanmıyorum.
Veritabanı Firebird kullanıyorum.
Kuri 4'lü Jedi Hocam Formun Createsine atmanın aynlış olacağını söylemişti.Sizinde söylediğiniz gibi bu az kayıtta yavaşlama yapmaz tabi fakat fazla kayıt girme olasılığınıda düşünerek sistemi o şekilde hazırlamak en doğrusu olacak.Bunun için fikirleriniz nedir acaba?
Kuri 4'lü Jedi Hocam Formun Createsine atmanın aynlış olacağını söylemişti.Sizinde söylediğiniz gibi bu az kayıtta yavaşlama yapmaz tabi fakat fazla kayıt girme olasılığınıda düşünerek sistemi o şekilde hazırlamak en doğrusu olacak.Bunun için fikirleriniz nedir acaba?
"Bilginin Doruğuna Hep Birlikte..."
Şu mantıktan yola çıkabiliriz sanırım. Her halukarda yüklenecek olan bilginin yüklenme süresi belli.(ister oncreate, ister başka bi yolla butonclick) Diyelim 10 sn.
Bu durumda bana göre en mantıklısı bi dialog kutusu çıkartarak yapılan işlem sürecini göstermek ki uzun süreli işlem yapan programların hemen hemen hepsinde bu şekilde yapılıyor.
Bu durumda bana göre en mantıklısı bi dialog kutusu çıkartarak yapılan işlem sürecini göstermek ki uzun süreli işlem yapan programların hemen hemen hepsinde bu şekilde yapılıyor.