Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
DB Server Reconnect
#1
Selam arkadaşlar.

FB DB kullanıyorum. Fakat bazen DB'ye bağlantı kesildiğin de uygulamayı kapatıp açmak gerekiyor. Sunucunun var olup olmadığını 3-5sn de bir kontrol edip DB'ye bağlantı yok ise reconnect olmasını sağlayan algoritma önerisi olan var mı? Burada nasıl bir senaryo izlemek gerkeiyor.. (Olay yakalama ve aksiyon olarak)..

Teşekkürler şimdiden.
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#2
(03-03-2019, Saat: 22:47)mcuyan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Selam arkadaşlar.

FB DB kullanıyorum. Fakat bazen DB'ye bağlantı kesildiğin de uygulamayı kapatıp açmak gerekiyor. Sunucunun var olup olmadığını 3-5sn de bir kontrol edip DB'ye bağlantı yok ise reconnect olmasını sağlayan algoritma önerisi olan var mı? Burada nasıl bir senaryo izlemek gerkeiyor.. (Olay yakalama ve aksiyon olarak)..

Teşekkürler şimdiden.

Merhaba, sürekli aktif olan bir arkaplan thread'iniz olacak aşağıdaki gibi:

  TThread.CreateAnonymousThread(
   procedure
   type
     TConnectionStatus = (csConnected, csDisconnected);

   var
     LocalConnection : TXYZConnection;
     LocalSP         : TXYZProc;
     ConnectionError : Boolean;

     iGiden,
     iGelen          : Integer;
     Status          : TConnectionStatus;
   begin
     TThread.CurrentThread.FreeOnTerminate := false;

     CoInitialize(nil); // Büyük ihtimalle COM kullanacaksınız bu nedenle lazım.

     LocalConnection := SizinAnaConnection.Clone; // Ana bağlantı nesneniz ile aynı özelliklere sahip bir klon
     LocalSP := TXYZProc.Create(nil);

     try
       LocalSP.ProcedureName := 'Getvalue';
       LocalSP.Connection := LocalConnection;

       Status := csConnected;

       while SleepEx(5000, true) <> WAIT_IO_COMPLETION do // Alertable durumda bekleyelim
       begin
         ConnectionError := false;

         iGiden := Random(1000);

         LocalSP.Close;
         LocalSP.Parameters.ParamByName('Deger').Value := iGiden;

         try
           LocalSP.Open;
         except
           ConnectionError := true;
         end;

         if (LocalSP.RecordCount > 0) and (not ConnectionError) then
         begin
           iGelen := LocalSP.FieldByName('DonenDeger').AsInteger;

           ConnectionError := iGelen <> (iGiden mod 1000);
         end;

         if (ConnectionError) and (Status = csConnected) then
         begin
           Status := csDisconnected;

           TThread.Queue(
             nil,

             procedure
             begin
               // Bağlantı yok
             end
           );
         end
         else
           if Status = csDisconnected then
           begin
             Status := csConnected;

             TThread.Queue(
               nil,

               procedure
               begin
                 // Bağlantı yeniden sağlandı
               end
             );
           end;
       end; // while SleepEx(5000, true) <> WAIT_IO_COMPLETION do // Alertable durumda bekleyelim
     finally
       CoUnInitialize;

       if Assigned(LocalConnection) then
         FreeAndNil(LocalConnection);

       if Assigned(LocalSP) then
         FreeAndNil(LocalSP);
     end;
   end
 ).Start;

Örnekte ismi Getvalue olan stored procedure'nin tek yaptığı bir parametre almak ve aldığı değerin 1000'e modundan kalan değeri geriye döndürmek. İlgili thread bağlantının olduğunu bu şekilde kuvvetle teyid etmiş oluyor. Tabii uygulamadan çıkar iken bu thread'e Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. komutu ile çıkıyoruz demeyi unutmayın. Bu hususta her iki sitede de örnek paylaşımlarım mevcut.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#3
Kullandıgınız database bilesenin "lost connection" ozelliği var mı kontrol edebilir misiniz? Eğer varsa onun üzerinden de yönetebilirsiniz. Misal FibPlus bilesenlerinde mevcut .
Cevapla
#4
@klavye hocam TIBDatabse nesnesi kullanıyorum. Onda yok maalesef. OnLogin, AfterDis, AfterCon, BeforCon ve BeforeDis eventları var. bunlarda işimize malesef yaramıyor..

@Tuğrul HELVACI hocam daha önce hiç threadlarla çalışmadım. Nerden başlayacağımı hatta bu kodları nereye yazacağımı bilmiyorum. Araştırayım biraz. Cevaplar için çok teşekkürler..
// Bilgi paylaştıkça çoğalır.. 

Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi ile Webserverlar icin cache server yapimi TheEAK 0 78 12-09-2019, Saat: 16:36
Son Yorum: TheEAK
  [ÇÖZÜLDÜ]Server İşletim Sisteminde Çalışan Windows Servis te is not a valid date Hata theSinan 9 246 28-08-2019, Saat: 10:05
Son Yorum: adelphiforumz
  Datasnap server üzerinden client bağlantısı sonlandırma seci20 13 1.279 15-03-2019, Saat: 09:10
Son Yorum: Tuğrul HELVACI
  [ÇÖZÜLDÜ] Google Calendar API Server tipi Erişim Metodu hakkında tecrübesi olan mrmarman 41 5.187 01-02-2019, Saat: 09:30
Son Yorum: Bay_Y
  Tcp server hakkında. seci20 5 702 28-01-2019, Saat: 19:35
Son Yorum: seci20



Konuyu Okuyanlar: 1 Ziyaretçi