![]() |
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
Dieses Thema wurde von "Phoenix" von "VCL / WinForms / Controls" nach "Datenbanken" verschoben.
Erstmal den Weg in die richtige Sparte... |
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:
, die Dir eine Liste aller vorhandenen Datenbanken in der Instanz als Tabelle ausgibt.
sp_databases
|
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. |
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 ![]() ![]() |
Re: MSSQL 2005 Servernamen ermitteln
vielen Dank Phoenix, ich hab das mal soweit umgesetzt, leider habe ich noch ein Problemchen
Delphi-Quellcode:
Ich bekomme keine Instanzen zurück, obwohl ich zwei habe ?
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; |
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. |
Re: MSSQL 2005 Servernamen ermitteln
Hallo Ruben,
Syntaxfehler bei der Automation sind eine häufige Fehlerursache:
Delphi-Quellcode:
Freundliche Grüße
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; Edit: NameList is one-based ... |
Re: MSSQL 2005 Servernamen ermitteln
Zitat:
|
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. |
Re: MSSQL 2005 Servernamen ermitteln
danke für die Antworten.
Ich bekomm erst gar keinen Instanzen zurück, an der Schleife kanns nicht liegen EDIT: auch wenn ich das -1 vergessen habe, aber beim testen kann das mal passieren :wall: . Firewall ist aktiv und ich kann sie leider nicht beinflussen. Das mit der NetServerEnum muss ich mir erstmal anschauen, noch nie davon gehört. Aber schön das ich scheinbar Source mäßig alles richtig mache :-D |
Re: MSSQL 2005 Servernamen ermitteln
Nicht ganz unwesentlich ist auch die Verwendung runder statt eckiger Klammern beim Aufruf der Methode Item().
|
Re: MSSQL 2005 Servernamen ermitteln
Zitat:
Bei COM kommt es eben auf die Groß- und Kleinschreibung an. z.B. gibt es count nicht, Count schon. Und Wie marabu schon sagte: item auf dem Instanzen-Objekt ist eine Methode und muss item(i) aufgerufen werden. Es ist kein Array welches man mit index[i] anspricht. |
Re: MSSQL 2005 Servernamen ermitteln
ok,ok, ich bekomm doch was zurück, ich sollte mir vielleicht auch noch den 2. Schleifendurchlauf anschauen, da stand dann meine SQL2005 Instanz drin,
aber die erste war leer, das müsste dann eigentlich mein SQL2000 Instanz sein. Hat da jemand eine Erklärung dafür? Edit: mein "count" funktioniert aber ?!? |
Re: MSSQL 2005 Servernamen ermitteln
hab es eben noch auf einem PC versucht der nur eine SQL2000 Instanz hat, dort gehts auch nicht. Die SQL2005 Instanzen werden angezeigt.
in der MSDN steht: Zitat:
|
Re: MSSQL 2005 Servernamen ermitteln
GGf. wird die DefaultInstanz nicht mit aufgelistet?
|
Re: MSSQL 2005 Servernamen ermitteln
Count oder count ist egal, aber die NameList beginnt nicht mit 0 sondern mit 1. Leider scheinen sehr unterschiedliche Ergebnisse möglich zu sein, je nach verwendeter Version der beteiligten Komponenten. Es wird gelegentlich beklagt, dass nur Servernamen geliefert werden. Ich kann das jetzt nicht nachvollziehen.
|
Re: MSSQL 2005 Servernamen ermitteln
ich danke dir Marabu.....
das die NameList nicht mit 0 beginnt war mein Problem, jetzt funktioniert es. Vielen Dank an alle :thumb: |
Re: MSSQL 2005 Servernamen ermitteln
jetzt steh ich vor dem Problem mit der SQLServer Version
ich nutze dazu das ![]() zu bestimmen. Leider bekomm ich immer die Verison 8, egal ob SQL2000 oder SQL2500. Hat jemand Erfahrung damit? |
Re: MSSQL 2005 Servernamen ermitteln
Zitat:
Zitat:
SQL-Code:
ab.
SELECT @@VERSION
|
Re: MSSQL 2005 Servernamen ermitteln
ist ja auch ne Doku vom SQL2008, d.h. für mich funktioniert zumindest für SQL2005 und 2000
das gleiche steht auch beim ListInstalledInstances Method, das funktionierts. das mit
SQL-Code:
ist natürlich auch eine Lösung.
Select @@Version
danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:50 Uhr. |
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