Arşiv Anasayfa SQL Server
Sayfalar: 1
Delphi ve SQL-DMO(SQL Distributed Management Objects) Gönderen: dynamo Tarih: 31 May 2007 10:03:04
SQL-DMO,MS SQL Server 200 veritabanı nesnelerini içeren COM tabanlı kütüphane dosyasıdır.

SQL-DMO Özellikleri:

1-)SQL-DMO,SQL Server 2000 Enterprise Manager tarafından kullanılan bir APIdir.Bundan dolayı herhangi bir uygulama SQL-DMO'yu kullanarak SQL Server 2000 Enterprise Manager'in sahip olduğu tüm fonksiyonları gerçekleştirebilir.

2-)SQL-DMO,bir SQL Server veritabanına bağlanmak için ODBC driver (versiyon 3.80 yada daha yukarısı) kullanır.

3-)SQL-DMO,bir bilgisayarda yüklü herhangi bir SQL Server instance'da bulunan sp'leri destekler.

4-)SQL-DMO komponentleri/nesneleri/fonksiyonları sqldmo.dll dosyasında tanımlanmıştır.Bu dll dosyasını,Delphi ortamında kullanabilmek için ektra dosya yada işlemlere gerek yoktur;SQL Server 2000, kurulum sırasında import eder.Sadece SQL-DMO header dosyası(SQLDMO_TLB) Delphi'de oluşturulmalıdır.
 
sqldmo.dll dosyası ,SQL Server'ün yüklü olduğu dizinde Bin klasöründe bulunmaktadır.Dosyanın konumu:
 "C:\Program Files\Microsoft SQL Server\80\Tools\Binn\sqldmo.dll" .

 Type Lib: C:\Program Files\Microsoft SQL Server\80\Tools\Binn\sqldmo.dll
 LIBID: {10010001-E260-11CF-AE68-00AA004A34D5}
 LCID: 0
 Helpfile: C:\Program Files\Microsoft SQL Server\80\Tools\Binn\SQLDMO80.hlp
 HelpString: Microsoft SQLDMO Object Library




Delphi IDE'sinde Project -> Import Yype Library -> çıkan menüde "Microsoft SQLDMO Object Library(Version 8.0)" seçip "Create Unit" butonuna basın.Yaklaşık 2 dk süren bir işlemden sonra 2.5 MB(65K satır) boyutunda SQLDMO_TLB.pas uniti oluşacaktır.


NOT1:

SQLDMO_TLB unitini projede kullandığımda derleyici SQLDMO_TLB.pas'ın  "property ID: Integer readonly dispid 10;" satırında
"[Error] SQLDMO_TLB.pas(12630): Identifier redeclared: 'ID'

hatasını verdi.SQLDMO_TLB unitinide bu satırı iptal ettim:

:
    property TypeOf: SQLDMO_OBJECT_TYPE readonly dispid 4;
    property Properties: Properties readonly dispid 7;
    property Name: WideString dispid 9;
    //property ID: Integer readonly dispid 10;         //<----------iptal edilen satır
    property SourceObjectOwner: WideString dispid 11;
    property SourceObjectName: WideString dispid 12;
    property Description: WideString dispid 13;
    procedure Remove; dispid 100;
    procedure BeginAlter; dispid 101;


NOT2:

SQLDMO_TLB uses kısmına eklenmişse projede Application nesnesini, başına Forms ekleyerek kullanınn.Aynı isimde SQLDMO_TLB unitinde de tanımlanmış.


Forms.Application.MessageBox('Yanlış Şifre Girdiniz....','UYARI',MB_OK);

SQLDMO ile ilgili örnek uygulamalar:

1-)SQLDMO ile local bilgisayar ve yerel ağdaki çalışan sql server listesi alma:

:
//SQLDMO ile local bilgisyar ve yerel ağdaki çalışan sql server listesi al
procedure GetAvailableServers( ServerList : TStrings);
var
    SQLDMO:Application;
    ListOfServers:NameList;
    i:integer;
begin
    SQLDMO:=CoApplication.Create;
    ListOfServers:=SQLDMO.ListAvailableSQLServers;
    for i:=1 to ListOfServers.Count do
    begin
        ServerList.Add(ListOfServers.Item(i));
    end;
end;

kullanımı:
:
procedure TForm1.Button2Click(Sender: TObject);
begin
   ComboBox1.Items:= GetAllServers;
end;

başka bir fonksiyon:

:
//SQLDMO ile local bilgisyar ve yerel ağdaki çalışan sql server listesi al
function GetAllServers:TStringList;
var
   sApp : _Application ;
   sName : NameList;
   rtn :TStringList;
   count,i :Integer;
begin
   try
      sApp :=coApplication.Create;
      sName :=sApp.ListAvailableSQLServers;
      rtn :=TStringList.Create;
      count :=SName.Count;
      for i :=0 to count -1 do
      begin
         rtn.Append(sName.Item(i));
      end;
      result :=rtn;
   except
      on E :Exception do
      begin
         Forms.Application.MessageBox(Pchar('SQLSERVER : '+E.message),'SQLSERVER',MB_OK+MB_ICONSTOP);
      end;
   end;
end;

kullanımı:
:
procedure TForm1.FormCreate(Sender: TObject);
begin
   GetAvailableServers(ComboBox1.Items);
end;


diğer bir  fonksiyon:

:
function SQLServerList(var ServerList:Tstrings):integer;
var
  SQLServer:Variant;
  SvrList:Variant;
  i,nServers:integer;
  sRetValue:String;
begin
 SQLServer := CreateOleObject('SQLDMO.Application');
 SvrList:= SQLServer.ListAvailableSQLServers;
 nServers:=SvrList.Count;
 serverlist.Clear;
 for i := 1 to nservers do
     serverlist.Add(svrlist.Item(i));
 SQLServer:=NULL;
 svrList:=NULL;
 result:=nServers;
end;

2-)SQLDMO ile Sql Server versiyonu öğrenme :

:
//SQLDMO ile Sql Servere ping atarak versiyonu öğrenme
function getSQLServerVersion(ServerName,LoginName,LoginPassword:String):String;
var
     osqlserver :_SqlServer;
     temp :SQLDMO_SQL_VER;
begin
     try
          oSqlserver :=coSqlserver.Create;
          oSqlserver._AddRef;
          oSqlserver.Name :=ServerName;
          temp :=oSqlserver.PingSQLServerVersion(ServerName,LoginName,LoginPassword);
          if temp=SQLDMOSQLVer_Unknown then
               result :='UnknownVer'
          else if temp=SQLDMOSQLVer_Pre_60 then
               result :='SQL60'
          else if temp=SQLDMOSQLVer_60 then
               result :='SQL60'
          else if temp=SQLDMOSQLVer_65 then
               result :='SQL65'
          else if temp=SQLDMOSQLVer_70 then
               result :='SQL70'
          else
               result :='SQL2000';
          oSqlserver._Release;
          oSqlserver :=nil;
     except
          on E :Exception do
          begin
              Forms.Application.MessageBox(Pchar('SQLSERVER : '+E.message),'SQLSERVER',MB_OK+MB_ICONSTOP);
          end;
     end;
end;

kullanımı:
:
procedure TForm1.Button5Click(Sender: TObject);
begin
   Label4.Caption:= getSQLServerVersion('.','sa','');  //(<bilgisyatAdı>,<KullanıcıAdı>,<Şifre>)
end;

başka bir fonksiyon:
:
//SQLDMO ile Sql Servere ping atarak versiyonu öğrenme
//_SQLServer ------> uses  SQLDMO_TLB
//TOleEnum ------> uses  ActiveX
function PingSQLServerVersion(const ServerName, UserName, Password: string):single;
var
  oSQLServer: _SQLServer;
  oSQLDMO_SQL_VER: TOleEnum;
begin
  oSQLServer := CoSQLServer.Create;
  oSQLDMO_SQL_VER := oSQLServer.PingSQLServerVersion(ServerName,UserName,Password);
  oSQLServer := nil;
  case oSQLDMO_SQL_VER of
    SQLDMOSQLVer_Pre_60: result := 5.0;
    SQLDMOSQLVer_60    : result := 6.0;
    SQLDMOSQLVer_65    : result := 6.5;
    SQLDMOSQLVer_70    : result := 7.0;
    SQLDMOSQLVer_80    : result := 8.0;
    else                 result := 0.0;
  end;
end;

SQL server Çalışıyorsa (MS SQL Server Database Engine Service=sqlservr.exe servisi çalışıyorsa) fonksiyon, result ile atanan 5,6,7,8 değerinden birini dönderir.8 değeri  SQL Server 2000'e karşılık gelmektedir.Eğer SQL Server bulunamazsa  0 değeri döner.

kullanımı:
:
procedure TForm1.Button6Click(Sender: TObject);
begin
    try
      if PingSQLServerVersion('.','sa','')<>0 then
         showmessage('server çalışıyor..')
   except
      showmessage('server çalışmıyor.......');
   end;
end;

3-)SQLDMO ile sql server veritabanına  bağlantı :

:
//SQLDMO ile sql server veritabanına  bağlantı
function ConnectToServer(const FHost, FLogin, FPWD: string): Boolean;
var
   SQLServer: _SQLServer;
   FLoginSecure:WordBool;
begin
   sqlserver:=coSqlserver.Create;
   //SqlServer.LoginSecure:= FLoginSecure;// NT-->Login Password;
   try
      sqlServer.Connect(FHost,FLogin,FPWD);
      result:=True;
   except
      On E:EOleException do
      begin
         ShowMessage(e.Message);
         result:=false;
      end;
   end;
   sqlserver:=nil;
end;

kullanımı:
:
procedure TForm1.Button1Click(Sender: TObject);
begin
   if ConnectToServer('.','sa','') then
      showmessage('server çalışıyor')
    else
      showmessage('server çalışmıyor.....');
end;

4-)SQLDMO ile sql server bağlantı kontrolü :

:
//SQLDMO ile sql server bağlantı kontrolü
function GetConnected(const ServerAdi,KullaniciAdi,Sifre:string): Boolean;
var
   oSQLServer: _SQLServer;
begin
   try
      osqlserver:=coSqlserver.Create;
      osqlserver.Connect(ServerAdi,KullaniciAdi,Sifre) ;
      Result := oSQLServer.VerifyConnection(SQLDMOConn_CurrentState);
   except
      ShowMessage('SQL Hata....');
   end;
   osqlserver:=nil;
end;

kullanımı:
:
procedure TForm1.Button11Click(Sender: TObject);
begin
   if GetConnected('.','sa','') then
      ShowMessage('Bağlantı var...')
   else
      ShowMessage('Bağlantı yok...');
end;

5-)SQLDMO ile bir sql server'deki veritabanı adları alma :

:
//SQLDMO ile bir sql server'deki veritabanı adları alma
function getAllDataBases(serverName,LoginName,LoginPassword:String):TStringList;
var
   oSqlServer :_SqlServer;
   rtn :TStringList;
   odataBase :_DataBase;
   count,i :Integer;
begin
   try
      osqlServer :=coSqlServer.Create;
      osqlServer._AddRef;
      osqlServer.Connect(ServerName,LoginName,LoginPassword);
      count :=osqlServer.Databases.Count;
      rtn :=TStringList.Create;
      for i :=1 to count do
      begin
         odataBase :=osqlserver.Databases.Item(i,'owner');
         rtn.Append(odataBase.Name);
      end;
      result :=rtn;
      osqlServer.DisConnect;
      oSqlServer._Release;
      osqlServer :=nil;
   except
      on E :Exception do
      begin
         Forms.Application.MessageBox(Pchar('SQLSERVER : '+E.message),'SQLSERVER',MB_OK+MB_ICONSTOP);
      end;
   end;
end;

kullanımı:
:
procedure TForm1.Button4Click(Sender: TObject);
begin
   ListBox1.Items:=getAllDataBases(ComboBox1.Text,'sa','');
end;

6-)SQLDMO ile veritabanı oluşturma :

:
//SQLDMO ile veritabanı oluşturma
procedure createDatabase(serverName,LoginName,LoginPassword,dataBaseName:String);
var
   odataBase :_Database;
   oDBFileData :_DBFile;
   oLogFile :_LogFile;
   osqlServer :_SqlServer;
begin
   try
      osqlServer :=cosqlServer.Create;
      osqlServer._AddRef;
      osqlServer.Connect(serverName,LoginName,LoginPassword);
      odataBase :=coDataBase.Create;
      odataBase._AddRef;
      oDBFileData :=coDBFile.Create;
      oDBFileData._AddRef;
      oLogFile :=coLogFile.Create;
      oLogFile._AddRef;
      oDataBase.Name :=dataBaseName;
      oDBFileData.Name :=dataBaseName;

      //'c:\program files\microsoft sql server\mssql\data\'
      oDBFileData.PhysicalName :=oSqlServer.Registry.SQLDataRoot +'\data\'+dataBaseName+'.mdf';
      oDBFileData.PrimaryFile :=true;
      oDBFileData.Size :=2;
      oDBFileData.FileGrowthType := SQLDMOGrowth_MB;
      oDBFileData.FileGrowth := 1;
      oDatabase.FileGroups.Item('PRIMARY').DBFiles.Add(oDBFileData);
      oLogFile.Name :=dataBaseName+'Log';
      oLogFile.PhysicalName :=oSqlServer.Registry.SQLDataRoot +'\data\'+dataBaseName+'.ldf';
      oLogFile.Size :=2;
      oDatabase.TransactionLog.LogFiles.Add(oLogFile);
      oSqlServer.Databases.Add(oDatabase);
      osqlServer.DisConnect;
      oSqlServer._Release;
      oSqlServer :=nil;
      oDataBase._Release;
      oDataBase :=nil;
      oDBFileData._Release;
      oDBFileData :=nil;
      oLogFile._Release;
      oLogFile :=nil;
   except
      on E:Exception do
      begin
         Forms.Application.MessageBox(Pchar('SQLSERVER : '+E.message),'SQLSERVER',MB_OK+MB_ICONSTOP);
      end;
   end;
end;


kullanımı:
:
procedure TForm1.Button7Click(Sender: TObject);
begin
   //dbBORDRO adlı veritabanını oluştursun
   createDatabase('.','sa','','dbBORDRO');
end;

başka bir fonksiyon:
:
//SQLDMO ile veritabanı oluşturma
function CreateSQLDatabase(ServerName:string; DBName:string ;DBPath:string ):Integer;
const
   SQLDMOGrowth_MB = 0;
var
   Server,DataBase,LogFile,DBFileData : OleVariant ;
   FileGroup : OLEVariant ;
begin

  //sql servere bağlan
  Server := CoSQLServer.Create ;

  //sql server authentication login
  Server.Connect(Server,'sa','') ;
  {
  //win nt authentication login
  Server.LoginSecure := True ;
  Server.Connect(Server);
  }


  DataBase := CoDatabase.Create ;
  DBFileData := CoDBFile.Create ;
  LogFile := CoLogFile.Create ;
  Database.Name := DBName ;

  //database dosyası
  DBFileData.Name := (DBPath + '_Data') ;
  DBFileData.PhysicalName := (DBPath + '.mdf') ;
  DBFileData.PrimaryFile := True ;
  DBFileData.FileGrowthType := SQLDMOGrowth_MB ;
  DBFileData.FileGrowth := 1 ;

  //database transaction log dosyası
  LogFile.Name := (DBPath + '_Log') ;
  LogFile.PhysicalName := (DBPath + '.ldf');
  Database.TransactionLog.LogFiles.Add(LogFile) ;

  //PRIMARY grubuna ekle
  Database.FileGroups.Item('PRIMARY').DBFiles.Add(DBFileData) ;

  //datadase register et
  Server.Databases.Add(Database) ;

  Server.Disconnect ;
  Server := Null ;
  Result := 1;
end;

kullanımı:
:
procedure TForm1.Button3Click(Sender: TObject);
var
   server_name,db_name,db_path:string;
begin
   server_name:='127.0.0.1';
   db_name:='MUSDB';
   db_path:=ExtractFilePath(Forms.Application.ExeName)+'DATA\MUSDB';
   if CreateSQLDatabase(server_name,db_name,db_path)=1 then
      Showmessage('veritabanı oluşturuldu')
   else
      Showmessage('veritabanı oluşturulamadı........');

end;

7-) SQLDMO ile veritabanı silme :
:
//SQLDMO ile veritabanı silme
procedure dropDatabase(serverName,LoginName,LoginPassword,dataBaseName:String);
var
   osqlServer:_SqlServer;
begin
   try
      osqlServer :=coSqlserver.Create;
      osqlServer._AddRef;
      osqlServer.Connect(serverName,LoginName,LoginPassword);
      osqlServer.Databases.Remove(dataBaseName,'owner');
      oSqlServer.DisConnect;
      osqlServer._Release;
      oSqlServer :=nil;
   except
      on E:Exception do
      begin
         Forms.Application.MessageBox(Pchar('SQLSERVER : '+E.message),'SQLSERVER',MB_OK+MB_ICONSTOP);
      end;
   end;
end;


kullanımı:
:
procedure TForm1.Button8Click(Sender: TObject);
begin
   //dbBORDRO adlı veritabanını sil
   dropDatabase('.','sa','','dbBORDRO');
end;

8-)SQLDMO ile veritabanı yedeğini alma :

:
//SQLDMO ile veritabanı yedeğini alma
function BackupDatabase(serverName,LoginName,LoginPassword,DBName,BackupFile: string): Boolean;
var
   osqlserver: _SQLServer;
   oBackup:_Backup;
   obackupdrv:_backupdevice;
begin

   osqlserver:=coSqlserver.Create;
   osqlserver.Connect(serverName,LoginName,LoginPassword) ;
   try
      DeleteFile(BackupFile);
      try
         oBackup:=coBackup.Create;
         obackupdrv:=coBackupDevice.Create ;
         obackupdrv.name:=DBName+'_bak';
         obackupdrv.Type_ :=SQLDMODevice_DiskDump;
         obackupdrv.PhysicalLocation :=BackupFile ;

         try
            osqlServer.BackupDevices.Add(obackupdrv);
         except
            showmessage('SQL Hata....');
         end;
         oBackup.action:=SQLDMOBackup_Database;
         oBackup.database:=DBName;
         oBackup.Devices :=DBName+'_bak';
         oBackup.SQLBackup(osqlserver) ;
         result:=True;
      except
         On E:EOleException do
         begin
            ShowMessage(e.Message);
            result:=false;
         end;
      end;
   finally
      osqlserver:=nil;
      oBackup:=nil;
      obackupdrv:=nil;
   end;
end;


//sql server--->enterprise manager--->management--->backup
//altında önceden oluşturulmuş bir backup device varsa bunu siler
procedure dropBackUpDevice(serverName,Loginname,LoginPassword,deviceName:String);
var
   osqlServer :_SqlServer;
   count,i:Integer;
   oBackupDevice :_BackupDevice;
begin
   try
      osqlServer :=coSqlServer.Create;
      osqlServer._AddRef;
      osqlServer.Connect(servername,LoginName,LoginPassword);
      count :=osqlServer.BackupDevices.Count;
      For i :=1 to count do
      begin
         oBackupDevice:=osqlServer.BackupDevices.Item(i);
         if UpperCase(Trim(oBackupDevice.Name))=UpperCase(trim(deviceName+'_bak')) then
         begin
            oSqlServer.BackupDevices.Remove(i);
            break;
         end;
      end;
      oSqlserver.DisConnect;
      oSqlServer._Release;
      oSqlServer :=nil;
   except
      on E :Exception do
      begin
         Forms.Application.MessageBox(Pchar('SQLSERVER : '+E.message),'SQLSERVER',MB_OK+MB_ICONSTOP);
      end;
   end;
end;


kullanımı:
:
procedure TForm1.Button12Click(Sender: TObject);
var
   db_name,db_path:string;
begin
   db_name:='dbBORDRO'; //veritabanı adı
   db_path:='C:\Bord.bck'; //yedeklemenin yapılacağı dosya adı
   dropBackUpDevice('.','sa','',db_name);   //BackupDatabase fonksiyonu hata vermesin diye önceden oluşturulmuş backup device varsa siler
   BackupDatabase('.','sa','',db_name,db_path);
end;

başka bir prosedür:
:
//SQLDMO ile veritabanı yedeğini alma
procedure createBackUpDatabase(serverName,LoginName,LoginPassword,DBName,FileName:String);
var
   osqlServer :_SqlServer;
   oBackup:_Backup;
   oBackupDevice :_BackupDevice;
begin
   try
      osqlServer :=coSqlServer.Create;
      osqlserver._AddRef;

      osqlServer.Connect(servername,LoginName,LoginPassword);

      oBackupDevice :=coBackupDevice.Create;
      oBackupDevice.PhysicalLocation :=FileName;
      oBackupDevice.Type_ :=SQLDMODevice_DiskDump;
      osqlServer.BackupDevices.Add(oBackupDevice);

      oBackup.action:=SQLDMOBackup_Database;
      oBackup.database:=DBName;
      oBackup.Devices :=DBName+'bak';
      oBackup.SQLBackup(osqlserver) ;

      osqlServer.DisConnect;
      osqlserver._Release;
      osqlserver :=nil;
      oBackup:=nil;
      oBackupDevice:=nil;
   except
   on E :Exception do
      begin
         Forms.Application.MessageBox(Pchar('SQLSERVER : '+E.message),'SQLSERVER',MB_OK+MB_ICONSTOP);
      end;
   end;
end;

kullanımı:
:
procedure TForm1.Button9Click(Sender: TObject);
var
   db_name,db_path:string;
begin
   db_name:='dbBORDRO'; //veritabanı adı
   db_path:='C:\Bord.bck'; //yedeklemenin yapılacağı dosya adı
   dropBackUpDevice('.','sa','',db_name);   //BackupDatabase fonksiyonu hata vermesin diye önceden oluşturulmuş backup device varsa siler
   createBackUpDatabase('.','sa','',db_name,db_path);
end;

9-)SQLDMO ile veritabanı yedeğini geri yükleme   :

:
//SQLDMO ile veritabanı yedeğini geri yükleme
function RestoreDB(serverName,LoginName,LoginPassword,DBName, RestoreFile: string): Boolean;
var
   osqlserver: _SQLServer;
   oRestore:_Restore;
begin
   osqlserver:=CoSQLServer.Create;
   osqlserver.Connect(serverName,LoginName,LoginPassword) ;
   try
      oRestore:=CoRestore.Create;
      oRestore.Files:=RestoreFile;
      oRestore.Database:=DBName;
      oRestore.SQLRestore(osqlserver);
      ShowMessage('Database geri yükleme tamamlandı...');
      result:=True;
      osqlserver:=nil;
      oRestore:=nil;
   except
      On E:EOleException do
      begin
         ShowMessage(e.Message);
         result:=false;
      end;
   end;

end;


kullanımı:
:
procedure TForm1.Button13Click(Sender: TObject);
begin
   RestoreDB('.','sa','','dbBORDRO','C:\Bord.bck');
end;

10-)SQLDMO ile tablo sql scriptini gösterme:

pubs veritabanında jobs tablosunun scriptini göstersin.

:
//tablo sql scriptini gösterme
procedure TForm1.Button20Click(Sender: TObject);
var
  DMO,DB,TB:   OLEvariant;
  Str:string;
begin
   Dmo:=   CreateOleObject('SQLDMO.SQLServer');
   DB:=   CreateOleObject('SQLDMO.DataBase');
   TB:=   CreateOleObject('SQLDMO.table');
   Dmo.connect('.','sa','');
   db:=dmo.databases.item('pubs');
   tb:=db.tables.item('jobs');
   str:=tb.script();
   showmessage(str);

   Dmo:=null;
   DB:=null;
   TB:=null;
end;

örnek uygulama:

SQLDMO fonksiyonlarını kullanarak MS SQL Server Database Manager programını yapalım:



:
//çalışabilir durumdaki sql server listesi
function GetAllServers:TStringList;
var
   sApp : _Application ;
   sName : NameList;
   rtn :TStringList;
   count,i :Integer;
begin
   try
      sApp :=coApplication.Create;
      sName :=sApp.ListAvailableSQLServers;
      rtn :=TStringList.Create;
      count :=SName.Count;
      for i :=0 to count -1 do
      begin
         rtn.Append(sName.Item(i));
      end;
      result :=rtn;
   except
      on E :Exception do
      begin
         Forms.Application.MessageBox(Pchar('SQLSERVER  :'+E.message),'SQL Server Service Manager',MB_OK+MB_ICONSTOP);
      end;
   end;
end;

Form->Create 'de çalışabilir durumdaki sql server listesini Combobox1'e doldur:
:
procedure TForm1.FormCreate(Sender: TObject);
begin
   str_exe:=ExtractFilePath(Forms.Application.ExeName);

   ComboBox1.Items.Assign(GetAllServers);
   ComboBox1.ItemIndex:=0;

   //sql server service  :sql server veritabanı motoru
   ComboBox2.ItemIndex:=0;
end;


sql servere başlatma, durdurma ,duraklatma ve durumu ile ilgili fonsiyonlar :

:
//sql server başlat
function StartSQLServer(ServerName,LoginName,LoginPassword:String):Boolean;
var
     oSqlServer :_SqlServer;
begin
     try
          osqlserver :=coSqlserver.Create;
          oSqlServer._AddRef;
          osqlserver.Name :=serverName;
          if oSqlServer.Status =SQLDMOSvc_Stopped then
               oSqlServer.Start(False,ServerName,LoginName,LoginPassword);
          if oSqlServer.Status=SQLDMOSvc_Paused then
               oSqlServer.Continue;
          if (oSqlServer.Status=SQLDMOSvc_Paused) or (oSqlServer.Status=SQLDMOSvc_Stopped) then
               result :=False
          else
               result :=true;
          oSqlServer._Release;
          oSqlServer :=nil;
     except
          on E :Exception do
          begin
               result:=False;
               Forms.Application.MessageBox(Pchar('SQLSERVER :'+E.message),'SQL Server Service Manager',MB_OK+MB_ICONSTOP);
          end;
     end;
end;

//sql server duraklat
function PauseSQLServer(ServerName:String):Boolean;
var
     oSqlserver :_SqlServer;
begin
     try
          oSqlServer :=coSqlserver.Create;
          oSqlserver._AddRef;
          oSqlserver.Name :=ServerName;
          oSqlServer.Pause;
          oSqlserver._Release;
          oSqlserver :=nil;
          result :=true;
     except
          on E :Exception do
          begin
               result :=false;
               Forms.Application.MessageBox(Pchar('SQLSERVER :'+E.message),'SQL Server Service Manager',MB_OK+MB_ICONSTOP);
          end;
     end;
end;

//sql server durdur
function StopSQLServer(serverName:String):Boolean;
var
     oSqlserver :_SqlServer;
begin
     try
          oSqlServer :=coSqlserver.Create;
          oSqlserver._AddRef;
          oSqlserver.Name :=ServerName;
          oSqlServer.Stop;
          oSqlserver._Release;
          oSqlserver :=nil;
          result :=true;
     except
          on E :Exception do
          begin
               result :=false;
               Forms.Application.MessageBox(Pchar('SQLSERVER :'+E.message),'SQL Server Service Manager',MB_OK+MB_ICONSTOP);
          end;
     end;
end;

//sql server durumu
function getSQLServerStatus(ServerName:String):String;
var
     oSqlServer :_SqlServer;
begin
     try
          osqlserver :=coSqlserver.Create;
          osqlServer._AddRef;
          osqlserver.Name :=serverName;
          if oSqlserver.Status=SQLDMOSvc_Unknown then
               result :='Unknown '
          else if oSqlserver.Status=SQLDMOSvc_Running then
               result :='Running '
          else if oSqlserver.Status=SQLDMOSvc_Paused then
               result :='Paused '
          else if oSqlserver.Status=SQLDMOSvc_Stopped then
               result :='Stopped '
          else if oSqlserver.Status=SQLDMOSvc_Starting then
               result :='Starting '
          else if oSqlserver.Status=SQLDMOSvc_Stopping then
               result :='Stopping '
          else if oSqlserver.Status=SQLDMOSvc_Continuing then
               result :='Continuing '
          else if oSqlserver.Status=SQLDMOSvc_Pausing then
               result :='Pausing ';
          oSqlserver._Release;
          oSqlserver :=nil;
     except
          on E :Exception do
          begin
               Forms.Application.MessageBox(Pchar('SQLSERVER :'+E.message),'SQL Server Service Manager',MB_OK+MB_ICONSTOP);
          end;
     end;
end;

server başlat:
:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
   if StartSQLServer('.','sa','') then
   begin
      StatusBar1.Panels[0].Text:=getSQLServerStatus(ComboBox1.Text)+'-'+'\\'+ComboBox1.Text+'-'+'MSSQLServer';
      Image1.Picture.LoadFromFile(str_exe+'runningserver.bmp');

      SpeedButton1.Enabled:=false;
      SpeedButton2.Enabled:=true;
      SpeedButton3.Enabled:=true;
   end
   else
   begin

   end;
end;

server duraklat:
:
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
   if Forms.Application.MessageBox(Pchar('\\'+ComboBox1.Text+ ' üzerinde MSSQLSERVER servisini DURAKLATMAK istiyor musunuz?'),'SQL Server Service Manager',MB_YESNO+MB_ICONINFORMATION)=ID_YES then
   begin
      PauseSQLServer(ComboBox1.Text);
      StatusBar1.Panels[0].Text:=getSQLServerStatus(ComboBox1.Text)+'-'+'\\'+ComboBox1.Text+'-'+'MSSQLServer';
      Image1.Picture.LoadFromFile(str_exe+'pauseserver.bmp');

      SpeedButton1.Enabled:=true;
      SpeedButton2.Enabled:=false;
      SpeedButton3.Enabled:=true;
   end;
end;

server durdur:
:
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
   if Forms.Application.MessageBox(Pchar('\\'+ComboBox1.Text+ ' üzerinde MSSQLSERVER servisini DURDURMAK istiyor musunuz?'),'SQL Server Service Manager',MB_YESNO+MB_ICONINFORMATION)=ID_YES then
   begin
      StopSQLServer(ComboBox1.Text);
      StatusBar1.Panels[0].Text:=getSQLServerStatus(ComboBox1.Text)+'-'+'\\'+ComboBox1.Text+'-'+'MSSQLServer';
      Image1.Picture.LoadFromFile(str_exe+'stopserver.bmp');
      SpeedButton1.Enabled:=true;
      SpeedButton2.Enabled:=true;
      SpeedButton3.Enabled:=false;
   end;
end;

NOT: Fonksiyonlarda kullanılan . ifadesi local bilgisayar demektir. ConnectToServer('.','sa','')

örnek uygulama ekte.


Ynt: Delphi ve SQL-DMO(SQL Distributed Management Objects) Gönderen: argeibrahim Tarih: 04 June 2007 09:51:27
hocam tşkler de
benım delphi de onu bulamadım ben ne yapmalıyım
Ynt: Delphi ve SQL-DMO(SQL Distributed Management Objects) Gönderen: olsunartik Tarih: 04 June 2007 16:55:58
Ellerinize saglik.
Ynt: Delphi ve SQL-DMO(SQL Distributed Management Objects) Gönderen: kocaturk Tarih: 04 June 2007 17:30:13
paylaşım için teşekkürler