Thread ile AdoConnection Kontrolü

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Bay_Y
Üye
Mesajlar: 109
Kayıt: 10 Mar 2014 11:12
Konum: İstanbul

Thread ile AdoConnection Kontrolü

Mesaj gönderen Bay_Y » 29 Kas 2017 11:56

Herkese merhabalar.

Öncelikle neden böyle birşeye ihtiyaç olduğundan bahsetmek istiyorum. SQl Server a bağlanmak için kullandığımız AdoConnection eğer bağlantı yoksa timeout süresi yaklaşık 30 sn sistemi kilitliyor. Böyle birşey olmaması adına bu kontrolü thread ile yaparak kilitlenmenin önüne geçmek istediğimde de bir sorunla karşılaştım. Şöyleki database bağlantısı olmadığında sistemde kilitlenme sorunu yok bağlantı olduğunda da sorun yok ama bu connection a diğer adoquery ve vea adotable bağlandığında ve işlem yapılmaya çalışıldığında hata veriyor. (her işlem yapılmaya çalışıldığında thread yeninden çalışıyor ve yeniden database i açmaya çalışıyor. Database in açık olup olmadığını kontrol edebilirim ama sanki bir yanlışlık varmış gibi her seferinde thread e gitmesi normal mi ?


Birde Indy bileşeninde Thread ile ilgili bir bileşen var bunu kullanmak herhangi bir sakınca doğurur mu ? Onda pek problem yaşamadım açıkcası.


Sorunlu Kod aşağıdaki gibidir.

type
TDataBaseThread = class(TThread)
public
constructor Create; reintroduce;
protected
procedure Execute; override;
end;


constructor TDataBaseThread.Create;
begin
inherited Create(True);
FreeOnTerminate := True;
end;


procedure TDataBaseThread.Execute;
begin
With Form1 do begin
CoInitialize(nil) ;
try
Ado1.Connected := true ;
except
Ado1.Connected := false;
end;
CoUninitialize() ;
end;
end;

procedure TForm1.ThreadTerminated(Sender: TObject);
begin
zLThread := nil;
Loading := False;
If TThread(Sender).FatalException = nil then begin
try
ShowMessage('database ok');
except
on eror:exception do
ShowMessage('database baglantısında hata ' + error.message);
end;
end else begin
ShowMessage(işlem tamamlanamadı.');
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
zLThread := TDataBaseThread.Create;
zLThread.OnTerminate := Form1.ThreadTerminated;
zLThread.Start;
Loading := True;
With SQl1 do begin
ACtive := False ;
SQL.Clear ;
SQl.Text := 'Select * From test' ;
Active := True ;
if recordcount>0 then
Memo1.Lines.Add('kayıt Var') else
Memo1.Lines.Add('kayıt yok');

End;
end;

thelvaci
Kıdemli Üye
Mesajlar: 764
Kayıt: 11 Tem 2010 06:17
Konum: Istanbul
İletişim:

Re: Thread ile AdoConnection Kontrolü

Mesaj gönderen thelvaci » 29 Kas 2017 04:22

Tek derdiniz Connection açılır iken ana thread'in bloklanmaması ise; bu durumda TADOConnection nesnesinin ConnectOptions property'sine coAsyncConnect değerini atamanızı ve denemenizi öneririm. Başka bir beklentiniz var ise ve thread kullanacaksanız bu durumda kurguladığınız thread hatalı.

Bay_Y
Üye
Mesajlar: 109
Kayıt: 10 Mar 2014 11:12
Konum: İstanbul

Re: Thread ile AdoConnection Kontrolü

Mesaj gönderen Bay_Y » 30 Kas 2017 08:57

çok teşekkür ederim , dener bilgilendirme için dönüş yaparım.

Cevapla