timer ile v.t. sürekli kontrol yapmak mantıklı mı?

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

timer ile v.t. sürekli kontrol yapmak mantıklı mı?

Mesaj gönderen y.kulac »

s.a.
arkadaşlar firebird v.t kullanıyorum. messenger benzeri ekranın sağ alt kısmından çıkarak mesaj veren bi uygulama yapmak istiyroum. v.t. kısmında tarih, saat ve açıklama alanlarım var. işin mantığı sistem tarih ve saati ile v.t. nına kayıtlı tarih ve saati karşılaştırıp eğer eşit iseler mesaj verdirmek istiyorum.
mesajıda jedi bileşenlerinde bulunan jvdesktopalert1 ile verdireceğim.

ama kafama takılan timer ile her saniye yada dakika v.t. nın dan sorgu çekmek ne derece mantıklı. yada bu işi başka nasıl yapabilirim. benim kodum şöyle olacak ama tereddütlerim var.

Kod: Tümünü seç

procedure TfrmAna.Timer1Timer(Sender: TObject);
begin
ibquery1.Close;
ibquery1.SQL.Clear;
ibquery1.SQL.Add('Select * from HATIRLAT');
ibquery1.SQL.Add('where TARIH = '''+edit1.Text+'''');
ibquery1.Open;

  ibquery1.First;
   while not ibquery1.Eof do
   begin
    if (ibquery1TARIH.Value = date) and (ibquery1SAAT.Value = time) then
    begin
    DesktopAlert1.MessageText := ibquery1ACIKLAMA.Value;
    DesktopAlert1.Execute;
    end;
   end;
end;


neler önerirsiniz.
iyi çalışmalar.
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Merhabalar,

Sonuçta kıstas için veri tabanına ihtiyacın olduğu için, mecburen SQL ile sorgulama yapmak zorundasın. TIMER iyi fikir. Ama belki THREAD bir yapı ile sistemi daha az kastırırsın.

Timer sanırım her dakika işlem yapacaktır. Buda fazla bir yük getirmez.

Ama dersenki daha taktiksel bir şey olsun, sana şunu öneririm.

Her saat başı, veri tabanını taratır yada sorgular, önümüzdeki bir saat içinde çıkması gereken mesajların ID'sini ve zamanını bir memotable'e yada herne ise ona aktarır. Sorgulamayı her dakika bu şeyden yaparsın.

Böylelikle her dakika V.T. açılıp kapanmamış olur.

Ha bu arada aldığımız bir saatlik dilim içerisine bir kayıt girilirse ne olacak diyeiblirsin. Bunu zaten programın algılayacak ve memotable'e insert edeceksin.

ama şunu söylüyeyim, binlerce kayıt olsa bile THREAD içine koyarsan sorgulamayı, sistem hiç mi hiç kasılmaz.

Kaldıki ben her saniye ekran görüntüsünü alıp V.T.'e saklayanbir şey yapmıştım, yinde fazla kasmıyordu.

Saygılar..
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

Merhaba

Evet belirtiğiniz periyotlarda veri tabanı sorgulaması yapmak performansı etkiler. Makul olan şu bence: Uygulama başladığında yada timer aktif olduğunda veri tabanından gerekli bilgiler çekilir ve değişkene atanır. Gerekli karşılaştırma işlemleride bu değişken ile yürütülür.

Bu işleyiş devam ederken, kullanıcı veri tabanına yeni görevler girebilir yada mevcut olanlar üzerinde değişiklik yapabilir. Bu değişiklikleri programın algılaması içinde IBEvents bileşeninden yararlanabilirsiniz. IBEvents'ın görevi belirlenmiş çerçeveler içersinde belirlenmiş veri tabanı olaylarını programa iletmektir. Mesela X tablosuna bir kayıt eklendiğinde, güncellendiğinde yada silindiğinde FB server bağlı bütün kullanıcılara olay bildirimi yapar. Bu bildirim sonucuna görede yeniden bir sorgulama yapabilirsiniz.

IBEvents'ın kullanımı ile ilgili bilgiyi forumda arama yaparak elde edebilirsiniz.
poshet303
Üye
Mesajlar: 235
Kayıt: 26 Eki 2005 01:15

Mesaj gönderen poshet303 »

Kontrol ve sorgulama işlemini stored procedure ile yaparsanız performans epeyce artacaktır. Makaleler kısmında FAOSOFT un güzel bir makalesi var SP ler hakkında.

Timer yerine thread kullanmak da performans artışı sağlayabilir.

Verdiğininz kodda optimize edilebilir. Daha SQL ağırlık hale getirilebilir.
Cevapla