18-11-2025, Saat: 09:12
GPT nin cevabı:
Aşağıda Delphi 7 + ADO + SQL Server için bağlantı koptuğunda yeniden bağlanma ve uygulamayı kapatıp açmaya gerek kalmaması için kullanılan en güvenilir yaklaşımı adım adım anlatıyorum.
Temel Sorun
ADOConnection bağlantısı koptuğunda (network kesilmesi, bilgisayarın uykuya geçmesi, kablo çıkması vs.) ADO’nun iç durumu “bozuluyor”.
ADO otomatik olarak yeniden bağlanmaz ve bu nedenle bütün Query/Command bileşenleri hataya düşer. Bu ADO’nun bir “eksikliğidir”.
Dolayısıyla manuel olarak yeniden bağlanma işlemi yazmanız gerekir.
En Sağlıklı Çözüm: "Connection Health Check" + "Auto-Reconnect"
Adım 1 — ADOConnection için bir fonksiyon yazın
DataModule’ünüze şu fonksiyonu ekleyin:
Bu fonksiyon:
Aşağıda Delphi 7 + ADO + SQL Server için bağlantı koptuğunda yeniden bağlanma ve uygulamayı kapatıp açmaya gerek kalmaması için kullanılan en güvenilir yaklaşımı adım adım anlatıyorum.
Temel Sorun
ADOConnection bağlantısı koptuğunda (network kesilmesi, bilgisayarın uykuya geçmesi, kablo çıkması vs.) ADO’nun iç durumu “bozuluyor”.
ADO otomatik olarak yeniden bağlanmaz ve bu nedenle bütün Query/Command bileşenleri hataya düşer. Bu ADO’nun bir “eksikliğidir”.
Dolayısıyla manuel olarak yeniden bağlanma işlemi yazmanız gerekir.
En Sağlıklı Çözüm: "Connection Health Check" + "Auto-Reconnect"
Adım 1 — ADOConnection için bir fonksiyon yazın
DataModule’ünüze şu fonksiyonu ekleyin:
function TDM.CheckAndReconnect: Boolean;
begin
Result := True;
try
// Bağlı değilse bağlan
if not ADOConnection1.Connected then
ADOConnection1.Connected := True;
// Bağlantı bozulmuş mu diye test sorgusu çalıştır
ADOConnection1.Execute('SELECT 1');
except
on E: Exception do
begin
Result := False;
// Yeniden bağlanmayı deneyelim
try
ADOConnection1.Connected := False;
Sleep(500); // küçük bekleme
ADOConnection1.Connected := True;
// Bağlantı tekrar test edilir
ADOConnection1.Execute('SELECT 1');
Result := True;
except
Result := False;
end;
end;
end;
end;
Bu fonksiyon:
- Bağlantı kopmuş olsa bile önce bağlantıyı kapatır.
- Tekrar bağlanmayı dener.
- Mini test sorgusu ile bağlantıyı doğrular.
Adım 2 — Tüm Query işlemlerinden önce bağlantı kontrolü
ADOQuery/ADOCommand çalıştırmadan önce:
if not DM.CheckAndReconnect then begin ShowMessage('Veritabanı bağlantısı sağlanamadı. Lütfen ağınızı kontrol edin.'); Exit; end;
Adım 3 — Global Exception Handling içinde de kontrol
Formlarınızda veya proje dosyanızda:
try if not DM.CheckAndReconnect then ShowMessage('Bağlantı kesildi. Yeniden bağlanılamadı.'); except on E: EOleException do begin if Pos('communication', LowerCase(E.Message)) > 0 then DM.CheckAndReconnect; end; end;
Adım 4 — Timeout ve ConnectionString ayarları
ConnectionString'e şunu ekleyin:
Connect Timeout=5;
ADOConnection nesnesine:
LoginPrompt := False; KeepConnection := True;
Ek olarak:
CommandTimeout := 10; ConnectionTimeout := 5;
Uyku Modunda Bağlantı Kaybı Problemi
Laptop uykuya geçince ağ kartı kapanır ve bağlantı mutlaka kopar.
Bu nedenle uygulamanızda timer ile periyodik bağlantı kontrolü ekleyebilirsiniz:
procedure TForm1.Timer1Timer(Sender: TObject); begin DM.CheckAndReconnect; end;
Alternatif Olarak (Daha Dayanıklı): MARS / FireDAC / Zeos
ADO eski bir teknoloji olduğu için bağlantı bozulunca çok kolay çöküyor.
Eğer geleceğe dönük bir çözüm isterseniz:- FireDAC (Delphi XE4+)
- ZeosLib (Delphi 7 ile uyumlu)
- MARS-DGL (REST servisleri)
- FireDAC (Delphi XE4+)
- ADO’ya göre çok daha stabil bağlantı yenileme mekanizmaları var.
- ✔️ Sonuç
Bu yöntemle:- Ağ gidip gelse bile uygulamanız yeniden bağlanır.
- Kullanıcı uygulamayı kapatmak zorunda kalmaz.
- Uyku modundan geri geldiğinde bile bağlantı yeniden kurulur.
Lütfen deneyip bilgi verebilir misiniz? Gerçekten işe yarayacak mı bende merak ettim.
- Ağ gidip gelse bile uygulamanız yeniden bağlanır.

