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ı.