Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Automatische verbindung mit lokalem MSSQL Server (https://www.delphipraxis.net/100409-automatische-verbindung-mit-lokalem-mssql-server.html)

daniel71 27. Sep 2007 22:29

Datenbank: MSSQL • Version: 2005 • Zugriff über: ADOConnection

Automatische verbindung mit lokalem MSSQL Server
 
Hallo

Ich scheribe ein tool das aus einer bestehenden datenbank von einem anderen programm ein dispo zeichnet.
Dieses programm (zum programmieren einer PBX) überprüft bei der installationsrutine ob schon ein sql server installiert ist, wenn nicht, wird zuerst der MS SQLExpress 2005 installiert. Ich weis also nicht welche version des MSSQL benutzt wird.

Ich habe versucht mit diesem skript die verfügbaren server zu ermitteln:
ListView SQL-Server auflisten

Dies gibt mir z.B "LAPTOP" zurück, um mit der ADOConnection eine verbindung per ConnectionString aufzubauen brauche ich aber "LAPTOP\MSSMLBIZ" oder "PC\SQLEXPRESS" (computername\servername)oder wie auch immer die verschiedenen MSSQL server benannt sind.

Da es sich nur um lokale SQL Server handelt funktioniert auch "localhost\MSSMLBIZ"

Auch wenn ich über das "Datenverknüpfungseigenschaften" fenster den server auswähle (dropdown) und danach die verbindung teste funktioniert es erst wenn ich "\MSSMLBIZ" dazufüge.

Gibt es eine ander möglichkeit sowas zu automatisieren oder mache ich da etwas falsch?

Ich benutze die windows-authentifizierung.
Ich möchte verhindern dass die benutzer meines tools etwas am SQL server rumbasteln müssen.


Vielen dank für eine antwort.
Gruss Daniel

marabu 28. Sep 2007 06:28

Re: Automatische verbindung mit lokalem MSSQL Server
 
Herzlich willkommen in der Delphi-PRAXiS, Daniel.

Nur wenn du mehrere Instanzen von MSSQLSERVER installierst wird der InstanceName benötigt. Die erste bzw. default Installation hat keinen Instanznamen, den steuerst du erst bei einem weiteren Setup über den Parameter INSTANCENAME bei. Im Readme*.html des Original-Setup findest du Erläuterungen zu diesem Thema. Hast du schon versucht dich einfach ohne InstanceName mit der Maschine zu verbinden?

Freundliche Grüße vom marabu

daniel71 28. Sep 2007 06:49

Re: Automatische verbindung mit lokalem MSSQL Server
 
Hallo

Erstmal vielen Dank für die schnelle Antwort.

Ich habe noch nicht versucht ohne instancenam zu verbinden, werde ich heute abend gleich mal versuchen.
Jedenfals wenn ich einen verbindungstest über das "Datenverknüpfungseigenschaften" fenster mache funktioniert der erst wenn ich die instanz auch angebe.

Das readme werde ich natürlich auch noch durchlesen

Da ich aber nicht weiss ob die user meines tools mehrer instanzen haben, muss ich diesen irgendwie ermitteln.
Gibt es da eine möglichkeit?

Gruss Daniel

marabu 28. Sep 2007 07:03

Re: Automatische verbindung mit lokalem MSSQL Server
 
Laut ReadMe musst du die Services auslesen und nach MSSQLSERVER bzw. MSSQLSERVER$INSTANCENAME suchen, wobei INSTANCENAME variabel ist.

daniel71 1. Okt 2007 21:06

Re: Automatische verbindung mit lokalem MSSQL Server
 
Hallo marabu

Klapt auch ohne die Istanz des SQL Servers anzugeben.


Nochmals vielen Dank für deine Hilfe

Gruss Daniel

daniel71 6. Jan 2008 23:17

Re: Automatische verbindung mit lokalem MSSQL Server
 
Hallo

Das mit der Verbindung ohne Instanzangabe hatte damals doch nicht funktioniert, und ich möchte hier meine Lösung niemandem vorenthalten. Es gibt sicherlich bessere Wege, als die, die ich gefunden habe, aber sie funktioniert.

Auch mit NetServerEnum fand ich den Instanzname nicht.

Mit den Diensten Auslesen kam ich auch auf keinen grünen Zweig.

Durch auslesen der Registry:
Delphi-Quellcode:
Uses
 Registry, ComCtrls;
--------------------------------

procedure TForm1.FormCreate(Sender: TObject);
var Reg: TRegistry;
    sList: TStringList;
    i: integer;
    Item: TListItem;
    Column: TListColumn;
begin
  ListView1.ViewStyle := vsReport;
  ListView1.Columns.Clear;
  Column := ListView1.Columns.Add;
  Column.Caption := 'Name';
  Column.AutoSize := true;
  Column := ListView1.Columns.Add;
  Column.Caption := 'Wert';
  Column.AutoSize := true;
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  sList := TStringList.Create;
  try
    if Reg.OpenKey('Software\Microsoft\Microsoft SQL Server\Instance Names\SQL',false) then
      begin
        Reg.GetValueNames(sList);
        for i := 0 to sList.Count - 1 do
          begin
            Item := ListView1.Items.Add;
            Item.Caption := sList[i];
            Item.SubItems.Add(Reg.ReadString(sList[i]));
          end;
        Reg.CloseKey;
      end;
  finally
    Reg.Free;
    sList.Free;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:35 Uhr.

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