Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MSSQL 2005 Servernamen ermitteln (https://www.delphipraxis.net/117275-mssql-2005-servernamen-ermitteln.html)

Centrii 15. Jul 2008 10:25


MSSQL 2005 Servernamen ermitteln
 
Hallo Wissende,

Ich steh grad vor einem kleinen Problem und hoffe das ihr mir weiter helfen könnt.
Ich suche eine Möglichkeit wie ich alle auf einem PC installierten MSSQL2005 Server ermitteln kann,
bzw. den Servernamen ermitteln kann.
Ich hab ein Programm wo lokal oder remote auf einen PC zugreift und Werte aus einer Tabelle holt.
Nun kann aber sein das auf dem einen PC die SQL2005 Datenbank "DatenbankX","DatenbankY",usw. heißt.
Wenn ich also über try and error suche bis ich den richtigen Namen gefunden hab dauert das ewig.
Deshalb würde ich gern vorher den Namen ermitteln.

Gibts da einen Weg?

Gruß Centrii

DP-Maintenance 15. Jul 2008 10:33

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "VCL / WinForms / Controls" nach "Datenbanken" verschoben.
Erstmal den Weg in die richtige Sparte...

Phoenix 15. Jul 2008 10:37

Re: MSSQL 2005 Servernamen ermitteln
 
Meinst Du die Instanz des SQL-Servers (also ein benannter laufender SQL-Server-Dienst, von dem es mehrere geben kann), oder meinst Du die Datenbank, die innerhalb einer solchen Instanz läuft?

Der Servername ist an und für sich der Name des Servers - also der Name der physikalischen (oder virtuellen) Maschine.

Edit Nachtrag:
Wenn Du die Datenbanken innerhalb einer Instanz meinst, so gibt es die Stored Procedure
SQL-Code:
sp_databases
, die Dir eine Liste aller vorhandenen Datenbanken in der Instanz als Tabelle ausgibt.

Centrii 15. Jul 2008 10:44

Re: MSSQL 2005 Servernamen (Instanz) ermitteln
 
Die Instanz. Wenn ich weiß das es auf dem PC PCName\InstanzX gibt weiß ich auch das es auf dem PC die DatenbankX gibt,
andernfalls PCName\InstanzY, dann muss es DatenbankY sein.
Ich mache das im moment über try and error, das geht aber zu lange, weil ich online Werte aus der Datenbank brauch, wo ich leider im Vorfeld
keine Instanz habe, nur den PCNamen.

Übrigends: Danke für verschieben Phoenix :thumb:

die Datenbanken unter der Instanz kann ich mir auch aus der Mastertabelle sysObject holen, das ist nicht das Problem.

Phoenix 15. Jul 2008 11:08

Re: MSSQL 2005 Servernamen ermitteln
 
Ah, okay. Das Stichwort dazu ist SQL-DMO (Distributed Management Objects).
Das sind eine Hand voll COM-Objekte mit denen Du sowas machen kannst.

Auf dem SQLServer2 Com-Objekt gibt es eine Methode namens ListInstalledInstances. Die macht genau das :)

Centrii 15. Jul 2008 11:57

Re: MSSQL 2005 Servernamen ermitteln
 
vielen Dank Phoenix, ich hab das mal soweit umgesetzt, leider habe ich noch ein Problemchen

Delphi-Quellcode:
var DMOSQL2, Instanzen: OLEVariant;
    i : Integer;
    Instanz: String;
begin
  DMOSQL2:= CreateOleObject('SQLDMO.SQLServer2');
  Instanzen := DMOSQL2.ListInstalledInstances('TBE87'); //mein PCName
  for i:=0 to Instanzen.count do begin
    Instanz := Instanzen.Item[i];
  end;
end;
Ich bekomme keine Instanzen zurück, obwohl ich zwei habe ?

Bernhard Geyer 15. Jul 2008 12:33

Re: MSSQL 2005 Servernamen ermitteln
 
Lokale Firewall installiert? Der Weg über COM ist etwas allergisch bezüglich Firewalls.

Schau mal ob du über die NetServerEnum-Win32API mehr bekommst.

marabu 15. Jul 2008 12:45

Re: MSSQL 2005 Servernamen ermitteln
 
Hallo Ruben,

Syntaxfehler bei der Automation sind eine häufige Fehlerursache:

Delphi-Quellcode:
var
  obj, nl: OLEVariant;
  i: Integer;
begin
  obj := CreateOleObject('SQLDMO.SQLServer2');
  nl := obj.ListInstalledInstances();
  for i := 1 to nl.Count do
    ShowMessage(Format('#%d: "%s"', [i, VarToStr(nl.Item(i))]));
end;
Freundliche Grüße

Edit: NameList is one-based ...

Bernhard Geyer 15. Jul 2008 12:52

Re: MSSQL 2005 Servernamen ermitteln
 
Zitat:

Zitat von marabu
Syntaxfehler bei der Automation sind eine häufige Fehlerursache:

Aber nur bei der Schleife. Die Methode ListInstalledInstances kann mit Servernamen (auch eigener Rechnername) aufgerufen werden. Aber u.U. geht man damit dem Firewall-Problem aus dem Weg.

Phoenix 15. Jul 2008 12:56

Re: MSSQL 2005 Servernamen ermitteln
 
Da rächt es sich, das Delphi nicht case-sensitive ist ;-)
Aber der Count-1 war der zweite geschossene Bock.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz