Kod: Tümünü seç
function IsSQLServerRunning(const server,database,user,password:string): Boolean;
var
TempConnection: TADOConnection; //uses ADODB
TempConnectionString: string;
begin
result := false;
try
CoInitialize(nil); //uses ActiveX
try
TempConnection := TADOConnection.Create(nil);
TempConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=%s;Password=%s;Initial Catalog=%s;Data Source=%s';
TempConnection.CommandTimeOut := 4;
TempConnection.ConnectionTimeOut := 4;
TempConnection.ConnectionString := Format(TempConnectionString, [user, password, database, server]);
TempConnection.KeepConnection := false;
TempConnection.LoginPrompt := false;
TempConnection.Open;
result := true;
except
result := false;
end
finally
CoUninitialize;
TempConnection.Close;
TempConnection.Free;
TempConnection := nil;
end;
end;
CoInitialize(): Çağrıldığı thread için COM kütüphanesini açar , bir anlamda kaynakları tahsis eder böylece COM fonksiyonlarını çağırabilecek hale gelir.
CoUninitialize():COM threadleri sonlanma aşamasında , COM kütüphanesini kapatmak ve bazı kaynakları geri vermek için bu fonksiyonu çağırmalıdır.
bağlantı testi, thread kullanmadan yapılırsa
Kod: Tümünü seç
procedure TForm1.Button2Click(Sender: TObject);
begin
if IsSQLServerRunning('.','master','sa','123') then
Label1.Caption:='Bağlantı Sağlandı.'
else
Label1.Caption:='Bağlantı Sağlanamadı.....';
end;
fonksiyonda kullanılan connectionTimeout süresi kadar form donacaktır.form kilitlenmesini önlemek için aynı zamanda bağlantı süresini progressbar'da izleyebilmek için thread kullanmak gerekir.
normalde tek bir thread oluşturup test yapılabilir:
Kod: Tümünü seç
var
Form1: TForm1;
hThr1: THandle;
procedure TForm1.FormCreate(Sender: TObject);
begin
terminateThread(hThr1, 9999);
end;
procedure Thread1;
var
i: Integer;
b1:Boolean;
begin
b1:=false;
form1.Label1.Caption:='Bağlanmaya Çalışıyor....';
if IsSQLServerRunning('.','master','sa','123') then
b1:=true
else
b1:=false;
for i := 1 to 100 do
begin
form1.ProgressBar1.Position:=i;
sleep(50);
end;
if b1=true then
form1.Label1.Caption:='Bağlantı Sağlandı.'
else
form1.Label1.Caption:='Bağlantı Sağlanamadı.....';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Createthread(nil, 0, @Thread1, nil, 0, hThr1);
end;

Kod: Tümünü seç
var
Form1: TForm1;
hThr1, hThr2: THandle;
bt:Boolean;
procedure TForm1.FormCreate(Sender: TObject);
begin
terminateThread(hThr1, 9999);
terminateThread(hThr2, 9999);
end;
procedure Thread1;
var
i: Integer;
begin
bt:=false;
form1.Label1.Caption:='Bağlanmaya Çalışıyor....';
if IsSQLServerRunning('.','master','sa','123') then
bt:=true
else
bt:=false;
end;
procedure Thread2;
var
i: Integer;
begin
form1.Button1.Enabled:=false;
form1.Shape1.Brush.Color:=clWhite;
for i := 1 to 100 do
begin
form1.ProgressBar1.Position:=i;
sleep(50);
end;
if bt=true then
begin
form1.Label1.Caption:='Bağlantı Sağlandı.' ;
form1.Shape1.Brush.Color:=clGreen;
end
else
begin
form1.Label1.Caption:='Bağlantı Sağlanamadı.....';
form1.Shape1.Brush.Color:=clRed;
end;
form1.Button1.Enabled:=true;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Createthread(nil, 0, @Thread1, nil, 0, hThr1);
Createthread(nil, 0, @Thread2, nil, 0, hThr2);
end;