S.a.
Server'da çalışan bir uygulamam var. Ana formda timer ile db'den belirli aralıklarla güncelleme yaptırıyorum. Buraya kadar sorun yok. Ancak server'a uzak masaüstü ile bağlanan makinalarda bazen 'bağlantı kesildi' şeklinde hata alıyorum ve bu hata
çıktığında ekranda 10-15 tane hata penceresini dolduruyor. Bu hatayı localde çalışan makinalar vermiyor, uzak masaüstünde uygulama kilitleniyor, yeniden çalıştırınca normal çalışmaya devam ediyor. Bu hataya timer sebeb oluyor gibime geliyor. Ne tavsiye edersiniz?
'Bağlantı Kesildi' hatası
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
'Bağlantı Kesildi' hatası
Erbab-ı kemâli çekemez nakıs olan, rencide olur Dide-i Huffaş ziyadan....
Re: 'Bağlantı Kesildi' hatası
En basit çözüm hata ekranını Try .. Except bloklarıyla kontrol altına al. Ekranda Timer Interval'e endeksli hata mesajlarından kurtulmuş olursun.
Re: 'Bağlantı Kesildi' hatası
s.a.
Try except ile hatayı kontrol altına aldım, güzel oldu. Ancak, bağlantı kesildiğini programın algıladığı anda hata mesajında önce
(veya programın herhangi bir yerinde deneme amacıyla ethernet kablosunu çıkarıp taktığımda) yeniden bağlantı kurmayı
denemesi, olmuyorsa hata mesajı vermeyi nasıl yapabiliriz? Yani except bloğunda hata mesajından önce
şeklinde denedim omuyor, bağlantı kesildi hatası devam ediyor..! 
Try except ile hatayı kontrol altına aldım, güzel oldu. Ancak, bağlantı kesildiğini programın algıladığı anda hata mesajında önce
(veya programın herhangi bir yerinde deneme amacıyla ethernet kablosunu çıkarıp taktığımda) yeniden bağlantı kurmayı
denemesi, olmuyorsa hata mesajı vermeyi nasıl yapabiliriz? Yani except bloğunda hata mesajından önce
Kod: Tümünü seç
adoconnection1.connectionstring:='......';
adoconnection1.connected:=true;

Erbab-ı kemâli çekemez nakıs olan, rencide olur Dide-i Huffaş ziyadan....
Re: 'Bağlantı Kesildi' hatası
iki adet timer bulundur.
Birisi Try Except bloğuyla sürekli bağlanmaya çalışsın. Ama çekiçleme yapmadan bu işi yapması lazım. Biliyorsun Timer nesnesi interval süresince aynı şeyi tekrar tekrar yapmaya çalışır. Senin bir işlemi sonlandırdığını anlaman ve ondan sonra yinelemen lazım. Yoksa connect olmaya çalışırken yeniden connect komutu alması olumsuzluğu yaşarsın.
Şöyle ki aşağıdaki şekilde Local bir değişken olan IslemSuruyor boolean değişkeni timer her interval uğradığında verdiğim {$j} direktifleri nedeni ile bir önceki değeri ne ise aynı değeri alır. Bu sayede bağlanmaya çalıştığı sırada bu blok tekrar çalıştırılmasının önüne geçilmiş olur. Göreceğin üzere yapacağın işlem Bağlantı koptuğunda bu Timer bloğunu çalıştırman ve arkana yaslanman yeterli. Bağlantı kurulduğunda timer otomatikman durur.
Nesnel yaklaşım budur. Sen görev verirsin, ilgili blok görevini yapar ve duracaksa durur.
Tabi buraya da Try Exept bloğu yine koyacaksın ki Except olduğunda IslemSuruyor FALSE edeceksin. Kafa karışıklığı yaşanmasın diye sade omurgayı göstermek istedim.
ÖZETLE :
Hata mesajını diğer eski kurduğun Try Except ile yakaladığında bu Timer'i çalıştıracaksın. Bu timer çalışırken diğeri kontrolü bırakacak, sonra kontrolü devralacak.
[ EDIT ] EKLEME YAPIYORUM
Burada TİMER'a ne gerek var diyenleri duyar gibiyim. İlk seferinde anlaşılmayabilinir. Time içine ekleyeceğin Try Except ile, timer yeniden aynı işlemi yinelemek için çalışır durumda bulunacağından gerek duyuluyor. Yoksa bu haliyle bir procedure bu işi bir kere yapardı.
Birisi Try Except bloğuyla sürekli bağlanmaya çalışsın. Ama çekiçleme yapmadan bu işi yapması lazım. Biliyorsun Timer nesnesi interval süresince aynı şeyi tekrar tekrar yapmaya çalışır. Senin bir işlemi sonlandırdığını anlaman ve ondan sonra yinelemen lazım. Yoksa connect olmaya çalışırken yeniden connect komutu alması olumsuzluğu yaşarsın.
Şöyle ki aşağıdaki şekilde Local bir değişken olan IslemSuruyor boolean değişkeni timer her interval uğradığında verdiğim {$j} direktifleri nedeni ile bir önceki değeri ne ise aynı değeri alır. Bu sayede bağlanmaya çalıştığı sırada bu blok tekrar çalıştırılmasının önüne geçilmiş olur. Göreceğin üzere yapacağın işlem Bağlantı koptuğunda bu Timer bloğunu çalıştırman ve arkana yaslanman yeterli. Bağlantı kurulduğunda timer otomatikman durur.
Nesnel yaklaşım budur. Sen görev verirsin, ilgili blok görevini yapar ve duracaksa durur.
Tabi buraya da Try Exept bloğu yine koyacaksın ki Except olduğunda IslemSuruyor FALSE edeceksin. Kafa karışıklığı yaşanmasın diye sade omurgayı göstermek istedim.
Kod: Tümünü seç
procedure TForm1.Timer1Timer(Sender: TObject);
Const
{$j+}
IslemSuruyor : Boolean=False;
{$j*}
begin
if NOT AdoConnection1.Connected then begin
if NOT IslemSuruyor then begin
IslemSuruyor := True;
AdoConnection1.ConnectionString := 'bla bla bla...';
AdoConnection1.Connected := True;
end;
end else begin
Timer1.Enabled := False; // Connected olduysa timer durur.
IslemSuruyor := False;
end;
end;
Hata mesajını diğer eski kurduğun Try Except ile yakaladığında bu Timer'i çalıştıracaksın. Bu timer çalışırken diğeri kontrolü bırakacak, sonra kontrolü devralacak.
[ EDIT ] EKLEME YAPIYORUM
Burada TİMER'a ne gerek var diyenleri duyar gibiyim. İlk seferinde anlaşılmayabilinir. Time içine ekleyeceğin Try Except ile, timer yeniden aynı işlemi yinelemek için çalışır durumda bulunacağından gerek duyuluyor. Yoksa bu haliyle bir procedure bu işi bir kere yapardı.
Re: 'Bağlantı Kesildi' hatası
Arman Hoca aramıza tekrardan hoşgeldin.
Uzun zamandır yoktun.
Yine Makale yazarcasına döktürmüşsün.
Uzun zamandır yoktun.
Yine Makale yazarcasına döktürmüşsün.
Bir kelimenin anlamını öğretsen bile yeter..



Re: 'Bağlantı Kesildi' hatası
Teşekkürler hocam.
Uzun ve yoğun bir iş temposundan yeni kurtuldum. Foruma henüz yavaş yavaş ısınıyorum. Boş vaktim oldukça yazılım-teknik konusunda yardımlarda bulunmaya çalışıcam.
Makale tadında olmasını seviyorum. Ayrıca makaleler alanında yazmaktan ziyade, gerçek sorunların olduğu başlıklar altında bu şekilde bulunması çözümlerin hayata dair bağlantısını kurmaya yardımcı ve daha akılda kalıcı oluyor, tek mesele Türkçe cümle kurgusunda son zamanlarda çok hata yapıyorum. Onlara biraz daha dikkat etmem lazım. Yukarıdaki cevapta da cümleler yola çıktıktan sonra yön değiştiriyor. Sonradan sabredip düzeltmem lazım ama saat geç vakitlerde yazınca uyku galip geliyor.

Uzun ve yoğun bir iş temposundan yeni kurtuldum. Foruma henüz yavaş yavaş ısınıyorum. Boş vaktim oldukça yazılım-teknik konusunda yardımlarda bulunmaya çalışıcam.

Makale tadında olmasını seviyorum. Ayrıca makaleler alanında yazmaktan ziyade, gerçek sorunların olduğu başlıklar altında bu şekilde bulunması çözümlerin hayata dair bağlantısını kurmaya yardımcı ve daha akılda kalıcı oluyor, tek mesele Türkçe cümle kurgusunda son zamanlarda çok hata yapıyorum. Onlara biraz daha dikkat etmem lazım. Yukarıdaki cevapta da cümleler yola çıktıktan sonra yön değiştiriyor. Sonradan sabredip düzeltmem lazım ama saat geç vakitlerde yazınca uyku galip geliyor.
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: 'Bağlantı Kesildi' hatası
Tekrar hoşgeldin hocam.
. Bu aralar uyumak lazım, çayı kahveyi bıraktık TV'yi bırakamadık bir türlü
.
Uyumanın formülü bu ise hemen denemem gerekmrmarman yazdı:.. cümleler yola çıktıktan sonra yön değiştiriyor. Sonradan sabredip düzeltmem lazım ama saat geç vakitlerde yazınca uyku galip geliyor.


Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .