Messenger tarzı yenilemede sorun

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
barisatalay
Üye
Mesajlar: 398
Kayıt: 02 Nis 2013 05:43
İletişim:

Messenger tarzı yenilemede sorun

Mesaj gönderen barisatalay »

Merhaba arkadaşlar öncelikle belirteyim size göre acemi bir yazılımcıyım :)
Şuan kendimi geliştirmek için bir proje üzerinde çalışıyorum hiç bir ticari yönü yoktur üniversiteden arkadaslarla aramızda olarak bir messenger tarzı tek bi alanda konuşma yeri yani.
Şimdi ben verileri web sitemdeki DBde tutuyorum ve herhngi bi kullanıcı birşey yazdığında veritabanına kaydoluyor ve timer(interval=2500) yardımı ile formdaki Richediti yeniletip son 15 kayıdı(Mesajı) getirtiyorum. Fakat bu yöntem bayağı bi acemice size görede bana görede ve timer her yenilediğinde bir flash patlaması gibi bi görüntü oluo ya hiç etikte olmıyor ne yapabilirim ? Mesela db ye ne zaman kayıt eklenirse sadece yeni eklenenleri getir diye ? Fikir paylaştıkça büyük teşekkür ederim şimdiden görüş bildirecek herkese bütüngün takip edicem bekliyorm akıl verebilecek herkesi :)

Timer;

Kod: Tümünü seç

DmForm.Sohbet.Close;
  DmForm.Sohbet.SQL.Clear;
  DmForm.Sohbet.SQL.Add('Select TOP 10 * from Sohbet Order by Tarih');
  DmForm.Sohbet.Open;
  Chat.Clear;
  for i:=1 to DmForm.Sohbet.RecordCount do begin
    //DmForm.EkranFrmChat.First;
    Chat.Lines.Add('['+QuotedStr(DmForm.Sohbet['Tarih'])+'] <'+DmForm.Sohbet['ID']+'>');
    Chat.Lines.Add(DmForm.Sohbet['Mesaj']);
    DmForm.Sohbet.Next;
  end;
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Messenger tarzı yenilemede sorun

Mesaj gönderen esistem »

Merhaba;
basitçe şu şekilde çözebilirsin;

muhtemelen web de mesajları kaydettiğin tabloda otomatik artan bir id alanın vardır muhakkak, yanına bir tablo daha yapıp son okuduğun id yi bu tabloya yazarsın, tabloya yazdığın id yi ilk okumada alırsın ve programda bir değişkende tutarsın, diyelim yeni mesaj yazdı herhangi bir kullanıcı, mesajı gönderince mesaj tablosuna attığında gidip bu id yi son id yi tuttuğun tabloda güncellersin ve bu id yi o kullanıcıda alıp programında tutar ki en son kayıt numarası neydi bilebilsin, program 3-5 saniyede bir gidip bu id tablosundaki değeri okur ve kendi tuttuğu id ile karşılaştırır, eğer farklı ise gidip mesajları getirir ve yine tablodaki son id yi alıp kendi değişkenine atar, bu böylece sürüp gider, her seferinde tüm kayıtları çekmek zorunda kalmazsın.

umarım anlatabilmişimdir.
kolay gelsin

birde şimdi gördüm,

Kod: Tümünü seç

  for i:=1 to DmForm.Sohbet.RecordCount do begin
    //DmForm.EkranFrmChat.First;
    Chat.Lines.Add('['+QuotedStr(DmForm.Sohbet['Tarih'])+'] <'+DmForm.Sohbet['ID']+'>');
    Chat.Lines.Add(DmForm.Sohbet['Mesaj']);
    DmForm.Sohbet.Next;
  end;
şeklinde yazmışsınız, o kodu şu şekilde değiştirirseniz sorunsuz çalışır.

Kod: Tümünü seç

DmForm.Sohbet.First;
  WHILE NOT DmForm.Sohbet.EOF() DO BEGIN
    Chat.Lines.Add('['+QuotedStr(DmForm.Sohbet['Tarih'])+'] <'+DmForm.Sohbet['ID']+'>');
    Chat.Lines.Add(DmForm.Sohbet['Mesaj']);
    DmForm.Sohbet.Next;
  end;
çünkü querty ler kayıt sayısını düzgün döndürmeyebilirler.
Cevapla