Announcement

Collapse
No announcement yet.

SQL-Server ermitteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL-Server ermitteln

    Hi,
    ich habe folgendes Problem.
    Das ist jetzt sicherlich ne Anfängerfrage, aber das bin ja auch noch...
    Ich suche nach einer Möglichkeit, festzustellen ob ein SQL-Server Lokal oder im Netzwerk vorhanden ist.
    Wie prüfe ich das ab?

  • #2
    Welcher SQL-Server (MS, Oracle, MySQL, Ingres, Informix, ...)?

    Comment


    • #3
      Ich suche nach dem MS-SQL-Server.

      Comment


      • #4
        Stichworte (für die Suche z.B. hier im Forum) wären NetServerEnum, SQLDMO und ODBC-API.

        Comment


        • #5
          Ich hab jetzt schon "alles" durchgeschaut, aber wirklich schlau bin ich auch nicht draus geworden.
          Kennst du vielleicht noch ne andere Seite die das Thema ausführlich behandelt?

          Trotzdem schon mal thanks...

          Comment


          • #6
            Hat eine ganze Weile gedauert, aber endlich habe ich ne erste Lösung gefunden :-D die sogar funktioniert...

            Nachtrag: allerdings listet das Ding jetzt "alles und jeden" auf... aber der Erste Schritt ist schon mal getan...
            Zuletzt editiert von Cre@or; 18.07.2008, 14:55.

            Comment


            • #7
              Also mit "alles und jeden" meine ich, das mein Prog jetzt alle Rechner im Netzwerk auflistet, allerdings nicht erkannt wurde, ob sich auf diesen Rechnern ein SQL Server befindet.

              Comment


              • #8
                Was machst du? Wenn du NetServerEnum korrekt verwendest passiert das nicht.

                Comment


                • #9
                  Naja, ich mache folgendes...

                  Code:
                   unit SQLServer_Erkennung;
                  
                   interface
                  
                   uses
                  
                     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                     Dialogs, StdCtrls, LM;
                  
                   type
                  
                     Tlogin = class(TForm)
                     Server: TListBox;
                     Button: TButton;
                     Label1: TLabel;
                  
                     procedure ButtonClick(Sender: TObject);
                  
                     private
                  
                       { Private-Deklarationen }
                  
                     public
                  
                       procedure ScanServers;
                  
                       { Public-Deklarationen }
                  
                     end;
                  
                   var
                  
                     login: Tlogin;
                  
                   implementation
                  
                   function NetServerEnum(
                  
                     const servername    : PWideChar;
                     const level         : DWORD;
                     const bufptr        : Pointer;
                     const prefmaxlen    : DWORD;
                     const entriesread   : PDWORD;
                     const totalentries  : PDWORD;
                     const servertype    : DWORD;
                     const domain        : PWideChar;
                     const resume_handle : PDWORD
                  
                   ) : NET_API_STATUS; stdcall; external 'netapi32.dll';
                  
                  
                   function NetApiBufferFree(
                  
                     const Buffer : Pointer
                  
                   ) : NET_API_STATUS; stdcall; external 'netapi32.dll';
                  
                  
                   procedure Tlogin.ScanServers;
                  
                   const
                  
                      MAX_PREFERRED_LENGTH = DWORD(-1);      //Alles was da ist raussuchen
                      NERR_Success = 0;                      //Funktion erfolgreich ausgeführt
                      SV_TYPE_ALL               = $FFFFFFFF; //Alle Rechner (Server, Workstations)
                      SV_TYPE_WORKSTATION       = $00000001; //All LAN Manager workstations
                      SV_TYPE_SERVER            = $00000002; //All LAN Manager servers
                      SV_TYPE_SQLSERVER         = $00000004; //Any server running with Microsoft SQL Server
                      SV_TYPE_DOMAIN_CTRL       = $00000008; //Primary domain controller
                      SV_TYPE_DOMAIN_BAKCTRL    = $00000010; //Backup domain controller
                      SV_TYPE_TIMESOURCE        = $00000020; //Server running the Timesource service
                      SV_TYPE_AFP               = $00000040; //Apple File Protocol servers
                      SV_TYPE_NOVELL            = $00000080; //Novell servers
                      SV_TYPE_DOMAIN_MEMBER     = $00000100; //LAN Manager 2.x Domain Member
                      SV_TYPE_LOCAL_LIST_ONLY   = $40000000; //Servers maintained by the browser. See the following Remarks section.
                      SV_TYPE_PRINT             = $00000200; //Server sharing print queue
                      SV_TYPE_DIALIN            = $00000400; //Server running dial-in service
                      SV_TYPE_XENIX_SERVER      = $00000800; //Xenix server
                      SV_TYPE_MFPN              = $00004000; //Microsoft File and Print for Netware
                      SV_TYPE_NT                = $00001000; //Windows NT (either Workstation or Server)
                      SV_TYPE_WFW               = $00002000; //Server running Windows for Workgroups
                      SV_TYPE_SERVER_NT         = $00008000; //Windows NT Non-DC server
                      SV_TYPE_POTENTIAL_BROWSER = $00010000; //Server that can run the Browser service
                      SV_TYPE_BACKUP_BROWSER    = $00020000; //Server running a Browser service as backup
                      SV_TYPE_MASTER_BROWSER    = $00040000; //Server running the master Browser service
                      SV_TYPE_DOMAIN_MASTER     = $00080000; //Server running the domain master Browser
                      SV_TYPE_DOMAIN_ENUM       = $80000000; //Primary Domain
                      SV_TYPE_WINDOWS           = $00400000; //Windows 95 or later
                  
                   type
                  
                     PSERVER_INFO_101 = ^SERVER_INFO_101;
                  
                     SERVER_INFO_101 = record
                  
                       dwPlatformId   : integer;
                       lpszServerName : LPWSTR;
                       dwVersionMajor : integer;
                       dwVersionMinor : integer;
                       dwType         : integer;
                       lpszComment    : LPWSTR;
                  
                   end;
                  
                   var
                  
                     pBuffer        : PSERVER_INFO_101;
                     pWork          : PSERVER_INFO_101;
                     dwEntriesRead  : DWORD;
                     dwTotalEntries : DWORD;
                     i              : integer;
                     dwResult       : NET_API_STATUS;
                  
                   begin
                  
                    Server.Items.Clear; // Server ist listbox
                  
                    dwResult := NetServerEnum(
                  
                                   nil,
                                   101,
                                   @pBuffer,
                                   MAX_PREFERRED_LENGTH,
                                   @dwEntriesRead,
                                   @dwTotalEntries,
                                   SV_TYPE_SQLSERVER,
                                   nil,
                                   0
                  
                                );
                  
                         if dwResult = NERR_SUCCESS
                  
                          then begin
                  
                           try
                  
                            pWork := pBuffer;
                  
                                 for i := 1 to dwEntriesRead do
                  
                                  begin
                  
                                   Server.Items.Add(pWork.lpszServerName);
                  
                                   inc(pWork);
                  
                                  end;
                  
                           finally
                  
                        NetApiBufferFree(pBuffer);
                  
                       end;
                  
                     end;
                  
                   end;
                  
                   {$R *.dfm}
                  
                   procedure Tlogin.ButtonClick(Sender: TObject);
                   begin
                  
                    ScanServers;
                  
                    Label1.Caption := IntToStr(Server.Items.Count);
                  
                   end;
                  
                  end.
                  ...ich habe da auch schon ein bisschen dran rumgebastelt (hier jetzt nicht zu sehen) und ich habe immer noch das selbe Ergebnis bekommen...

                  Ich habe mir das ganze auf ner Seite rausgesucht deren Adresse ich leider vergessen habe... sry...

                  Comment


                  • #10
                    Naja, hab das ganze jetzt mal für alle umgebaut die das vielleicht mal brauchen werden, denn ich hab um das zu finden ne ganze Weile suchen müssen...

                    Was machst du? Wenn du NetServerEnum korrekt verwendest passiert das nicht.
                    Ich verwende das ja korrekt, es ist nur so das ich derzeit ein Praktikum über die Ferien mir beschafft habe und mein Versuch sowie das gezeigte Ergebnis irgendwie nicht überzeugend waren.

                    Naja, hier nochmal der geänderte Quellcode für alle suchenden...

                    Code:
                     unit SQLServer_Erkennung;
                    
                     interface
                    
                     uses
                    
                       Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                       Dialogs, StdCtrls, LM;
                    
                     type
                    
                       Tlogin = class(TForm)
                    
                       Server   : TListBox;
                       Button   : TButton;
                       Label1   : TLabel;
                       ComboBox : TComboBox;
                       Label2   : TLabel;
                    
                       procedure ButtonClick(Sender: TObject);
                       procedure ComboBoxChange(Sender: TObject);
                    
                       private
                    
                         { Private-Deklarationen }
                    
                       public
                    
                         procedure ScanServers;
                    
                         { Public-Deklarationen }
                    
                       end;
                    
                     var
                    
                       login: Tlogin;
                    
                       SV_My: OleVariant;
                    
                     implementation
                    
                     function NetServerEnum(
                    
                       const servername    : PWideChar;
                       const level         : DWORD;
                       const bufptr        : Pointer;
                       const prefmaxlen    : DWORD;
                       const entriesread   : PDWORD;
                       const totalentries  : PDWORD;
                       const servertype    : DWORD;
                       const domain        : PWideChar;
                       const resume_handle : PDWORD
                    
                     ) : NET_API_STATUS; stdcall; external 'netapi32.dll';
                    
                    
                     function NetApiBufferFree(
                    
                       const Buffer : Pointer
                    
                     ) : NET_API_STATUS; stdcall; external 'netapi32.dll';
                    
                    
                     procedure Tlogin.ScanServers;
                    
                     const
                    
                        MAX_PREFERRED_LENGTH = DWORD(-1);      //Alles was da ist raussuchen
                    
                        NERR_Success = 0;                      //Funktion erfolgreich ausgeführt
                    
                         { SV_TYPE_ALL               = $FFFFFFFF; //Alle Rechner (Server, Workstations)
                           SV_TYPE_WORKSTATION       = $00000001; //All LAN Manager workstations
                           SV_TYPE_SERVER            = $00000002; //All LAN Manager servers
                           SV_TYPE_SQLSERVER         = $00000004; //Any server running with Microsoft SQL Server
                           SV_TYPE_DOMAIN_CTRL       = $00000008; //Primary domain controller
                           SV_TYPE_DOMAIN_BAKCTRL    = $00000010; //Backup domain controller
                           SV_TYPE_TIMESOURCE        = $00000020; //Server running the Timesource service
                           SV_TYPE_AFP               = $00000040; //Apple File Protocol servers
                           SV_TYPE_NOVELL            = $00000080; //Novell servers
                           SV_TYPE_DOMAIN_MEMBER     = $00000100; //LAN Manager 2.x Domain Member
                           SV_TYPE_LOCAL_LIST_ONLY   = $40000000; //Servers maintained by the browser. See the following Remarks section.
                           SV_TYPE_PRINT             = $00000200; //Server sharing print queue
                           SV_TYPE_DIALIN            = $00000400; //Server running dial-in service
                           SV_TYPE_XENIX_SERVER      = $00000800; //Xenix server
                           SV_TYPE_MFPN              = $00004000; //Microsoft File and Print for Netware
                           SV_TYPE_NT                = $00001000; //Windows NT (either Workstation or Server)
                           SV_TYPE_WFW               = $00002000; //Server running Windows for Workgroups
                           SV_TYPE_SERVER_NT         = $00008000; //Windows NT Non-DC server
                           SV_TYPE_POTENTIAL_BROWSER = $00010000; //Server that can run the Browser service
                           SV_TYPE_BACKUP_BROWSER    = $00020000; //Server running a Browser service as backup
                           SV_TYPE_MASTER_BROWSER    = $00040000; //Server running the master Browser service
                           SV_TYPE_DOMAIN_MASTER     = $00080000; //Server running the domain master Browser
                           SV_TYPE_DOMAIN_ENUM       = $80000000; //Primary Domain
                           SV_TYPE_WINDOWS           = $00400000; //Windows 95 or later  }
                    
                     type
                    
                       PSERVER_INFO_101 = ^SERVER_INFO_101;
                    
                       SERVER_INFO_101 = record
                    
                         dwPlatformId   : integer;
                         lpszServerName : LPWSTR;
                         dwVersionMajor : integer;
                         dwVersionMinor : integer;
                         dwType         : integer;
                         lpszComment    : LPWSTR;
                    
                     end;
                    
                     var
                    
                       pBuffer        : PSERVER_INFO_101;
                       pWork          : PSERVER_INFO_101;
                       dwEntriesRead  : DWORD;
                       dwTotalEntries : DWORD;
                       i              : integer;
                       dwResult       : NET_API_STATUS;
                    
                     begin
                    
                      Server.Items.Clear; // Server ist listbox
                    
                      dwResult := NetServerEnum(
                    
                                     nil,
                                     101,
                                     @pBuffer,
                                     MAX_PREFERRED_LENGTH,
                                     @dwEntriesRead,
                                     @dwTotalEntries,
                                     SV_My,
                                     nil,
                                     0
                    
                                  );
                    
                           if dwResult = NERR_SUCCESS
                    
                            then begin
                    
                             try
                    
                              pWork := pBuffer;
                    
                                   for i := 1 to dwEntriesRead do
                    
                                    begin
                    
                                     Server.Items.Add(pWork.lpszServerName);
                    
                                     inc(pWork);
                    
                                    end;
                    
                             finally
                    
                              NetApiBufferFree(pBuffer);
                    
                            end;
                    
                           end;
                    
                     end;
                    
                     {$R *.dfm}
                    
                     procedure Tlogin.ButtonClick(Sender: TObject);
                     begin
                    
                      ScanServers;
                    
                      Label1.Caption := 'Gefunden: ' + IntToStr(Server.Items.Count);
                    
                      Label2.Caption := 'Suchbegriff: ' + ComboBox.Items[ComboBox.ItemIndex];
                    
                     end;
                    
                     procedure Tlogin.ComboBoxChange(Sender: TObject);
                     begin
                    
                      case ComboBox.ItemIndex of
                    
                       0 : begin SV_My := $FFFFFFFF; end;
                       1 : begin SV_My := $00000001; end;
                       2 : begin SV_My := $00000002; end;
                       3 : begin SV_My := $00000004; end;
                       4 : begin SV_My := $00000008; end;
                       5 : begin SV_My := $00000010; end;
                       6 : begin SV_My := $00000020; end;
                       7 : begin SV_My := $00000040; end;
                       8 : begin SV_My := $00000080; end;
                       9 : begin SV_My := $00000100; end;
                       10: begin SV_My := $40000000; end;
                       11: begin SV_My := $00000200; end;
                       12: begin SV_My := $00000400; end;
                       13: begin SV_My := $00000800; end;
                       14: begin SV_My := $00004000; end;
                       15: begin SV_My := $00001000; end;
                       16: begin SV_My := $00002000; end;
                       17: begin SV_My := $00008000; end;
                       18: begin SV_My := $00010000; end;
                       19: begin SV_My := $00020000; end;
                       20: begin SV_My := $00040000; end;
                       21: begin SV_My := $00080000; end;
                       22: begin SV_My := $80000000; end;
                       23: begin SV_My := $00400000; end;
                    
                      end;
                    
                     end;
                    
                    end.
                    Aber vergesst nicht die LM-Datei einzubinden...

                    Die findet sich schnell nach einer kurzen Suchanfrage bei Google...

                    Comment

                    Working...
                    X