Delphi Dünyası Facebook'ta

Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

Gönderen Konu: Ms Sql Server Veritabanı Bağlantısını Progressbar'da İzleme  (Okunma sayısı 3114 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı dynamo

  • Delphi 3 Level 4
  • ****
  • İleti: 137
  • Rep: +3/-1
öncelikle sql server veritabanı bağlantısını test etmek için bir fonksiyon oluşturalım:

Kod:  (Unknown Language)
  1. function IsSQLServerRunning(const server,database,user,password:string): Boolean;
  2. var
  3.   TempConnection: TADOConnection;  //uses ADODB
  4.   TempConnectionString: string;
  5. begin
  6.    result := false;
  7.    try
  8.       CoInitialize(nil);  //uses ActiveX
  9.       try
  10.          TempConnection := TADOConnection.Create(nil);
  11.          TempConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=%s;Password=%s;Initial Catalog=%s;Data Source=%s';
  12.          TempConnection.CommandTimeOut := 4;
  13.          TempConnection.ConnectionTimeOut := 4;
  14.          TempConnection.ConnectionString := Format(TempConnectionString, [user, password, database, server]);
  15.          TempConnection.KeepConnection := false;
  16.          TempConnection.LoginPrompt := false;
  17.          TempConnection.Open;
  18.          result := true;
  19.       except
  20.          result := false;
  21.       end
  22.    finally
  23.       CoUninitialize;
  24.       TempConnection.Close;
  25.       TempConnection.Free;
  26.       TempConnection := nil;
  27.    end;
  28. end;

IsSQLServerRunning fonksiyonu 4 parametre alır.server parametresi bilgisayar adı yada ip no(instance name);database parametresi bağlanılacak veritabanı adı,varsayılan master kullanılır;user parametresi kullanıcı adı,varsayılan sa ;password parametresi kullanıcının şifresi, varsayılan sa'nın şifresi.fonksiyonda connectiontimeout değeri 4 sn olarak belirlendi.

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

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:  (Unknown Language)
  1. var
  2.   Form1: TForm1;
  3.   hThr1: THandle;
  4.   bt:Boolean;
  5.  
  6.  
  7. procedure TForm1.FormCreate(Sender: TObject);
  8. begin
  9.    terminateThread(hThr1, 9999);
  10. end;
  11.  
  12.  
  13. procedure Thread1;
  14. var
  15.   i: Integer;
  16.   b1:Boolean;
  17. begin
  18.    b1:=false;
  19.    form1.Label1.Caption:='Baglanmaya Calisiyor....';
  20.    if  IsSQLServerRunning('.','master','sa','123') then
  21.       b1:=true
  22.    else
  23.       b1:=false;
  24.    for i := 1 to 100 do
  25.    begin
  26.       form1.ProgressBar1.Position:=i;
  27.       sleep(50);
  28.    end;
  29.  
  30.    if b1=true then
  31.       form1.Label1.Caption:='Baglanti Saglandi.'
  32.    else
  33.       form1.Label1.Caption:='Baglanti Saglanamadi.....';
  34.  
  35. end;
  36.  
  37. procedure TForm1.Button1Click(Sender: TObject);
  38. begin
  39.    Createthread(nil, 0, @Thread1, nil, 0, hThr1);
  40. end;
  41.  

fakat ADOConnection (eğer sql server bağlantısı yoksa) ConnectionTimeOut'a atanan değer kadar sonra for döngüsü çalışacaktır.bu istenmeyen durumu ortadan kaldırmak için 2 thread kullanıldı.




Kod:  (Unknown Language)
  1. var
  2.   Form1: TForm1;
  3.   hThr1, hThr2: THandle;
  4.   bt:Boolean;
  5.  
  6. procedure TForm1.FormCreate(Sender: TObject);
  7. begin
  8.    terminateThread(hThr1, 9999);
  9.    terminateThread(hThr2, 9999);
  10. end;
  11.  
  12. procedure Thread1;
  13. var
  14.   i: Integer;
  15. begin
  16.    bt:=false;
  17.    form1.Label1.Caption:='Baglanmaya Calisiyor....';
  18.    if  IsSQLServerRunning('.','master','sa','123') then
  19.       bt:=true
  20.    else
  21.       bt:=false;
  22. end;
  23.  
  24. procedure Thread2;
  25. var
  26.   i: Integer;
  27. begin
  28.    form1.Button1.Enabled:=false;
  29.    form1.Shape1.Brush.Color:=clWhite;
  30.  
  31.    for i := 1 to 100 do
  32.    begin
  33.       form1.ProgressBar1.Position:=i;
  34.       sleep(50);
  35.    end;
  36.  
  37.    if bt=true then
  38.    begin
  39.       form1.Label1.Caption:='Baglanti Saglandi.' ;
  40.       form1.Shape1.Brush.Color:=clGreen;
  41.    end
  42.    else
  43.    begin
  44.       form1.Label1.Caption:='Baglanti Saglanamadi.....';
  45.       form1.Shape1.Brush.Color:=clRed;
  46.    end;
  47.  
  48.    form1.Button1.Enabled:=true;
  49. end;
  50.  
  51.  
  52. procedure TForm1.Button1Click(Sender: TObject);
  53. begin
  54.    Createthread(nil, 0, @Thread1, nil, 0, hThr1);
  55.    Createthread(nil, 0, @Thread2, nil, 0, hThr2);
  56. end;


Thread1 sql server veritabanı bağlantısı,Thread2 for döngüsünü çalıştırır.eğer sql server bağlantısı yoksa ,connectionTimeout süresi (fonksiyonda 4 sn) sonunda bağlantı testi bitmiş global bt değişkenine false değeri atanmış olur.bu arada for döngüsüde (5 sn) bitmiş olacak ve bir alt satırdaki kodları çalıştıracaktır.

örnek uygulama ekte.
« Son Düzenleme: 04 Temmuz 2007 10:35:58 by Fatih »

Çevrimdışı Kocaturk

  • Administrator
  • *****
  • İleti: 2.474
  • Rep: +56/-5
  • Cinsiyet: Bay
    • Delphi Dünyası
Paylaşım için teşekkürler eline sağlık.

Çevrimdışı yalo07

  • Delphi 1 Level 2
  • **
  • İleti: 15
  • Rep: +0/-0
Ynt: Ms Sql Server Veritabanı Bağlantısını Progressbar'da İzleme
« Yanıtla #2 : 07 Aralık 2010 01:40:51 »
paylaşım için saol fakat bağlanamadığında server stop edildiğinde hata veriyor program