Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Mit SQL Server Verbinden (https://www.delphipraxis.net/148239-mit-sql-server-verbinden.html)

Daniela.S 25. Feb 2010 17:40

Datenbank: SQL Server Express • Version: 2005 • Zugriff über: ADO

Mit SQL Server Verbinden
 
Schönen guten Abend,

vielleicht kann mir jemand helfen. Mein Programm sollte nach Installation mit einem SQL Server verbunden werden und dem User die Möglichkeit geben den Server selbst anzugeben. Jetzt muss ich natürlich alle verfügbaren SQL Server auflisten. Und da scheitert es bereits. Ich möchte gerne die selben Einstellungen gezeiugt bekommen wie beim Anmelden über die Management Konsole.

Ich habe es jetzt schon mit NetServerEnum oder SQLDMO.SQLServer2 versucht. Aus dem Netzwerk wird ja was angezeigt, aber Informationen über den lokalen Server werden nicht angezeigt. Über "Localhost" kann ich mich auch nicht verbinden, das schlägt fehl.

Wenn mir jemand einen Tipp geben könnte, welche Funktion diese Management Konsole aufruft um die verfügbaren Server anzuzeigen, wäre ich echt dankbar.


liebe Grüße,
Daniela

Alter Mann 25. Feb 2010 18:08

Re: Mit SQL Server Verbinden
 
Hallo

Dein Problem ist relativ Einfach zu lösen:
Delphi-Quellcode:
...
implementation

uses
   ... AdoConEd, ...

procedure TForm1.SetDatabaseSource;
begin
  if EditConnectionString(dmADO.ADOC) then dmADO.ADOC.Open;
end;
...
Dabei ist dmADO ein DataModule und ADOC eine ADOConnection.
Alles klar?

Viele Grüße

Daniela.S 25. Feb 2010 18:25

Re: Mit SQL Server Verbinden
 
Danke, das Problem ist nur, wenn nur ein lokaler Server gefunden wird, dann soll sich die Anwendung automatisch verbinden. Wenn nicht, dann nur einen ganz simplen Dialog, indem nur die laufenden SQL Server Lokal und im Netzwerk aufgelistet sind. So wie in der Management Konsole.

Jetzt habe ich es mal so probiert... ich nehme den Computernamen und dazu die Instanz des SQL Servers aus der Registry. Also "Computername\Instanz". Funktioniert zwar, aber ob das so eine schöne Lösung ist :?:

Alter Mann 25. Feb 2010 18:37

Re: Mit SQL Server Verbinden
 
Hallo Daniela S.

Deine Antwort sagt mir das du den Code nicht getestet hast. Warum?
Ansonsten gibt es von Colin Wilson eine paar gute Units, mit dem
du das Netzwerk nach allen SQL-Servern suchen kannst. Von Lukie gibt
so etwas auch, aber da weiß ich nicht genau welche Unit's das sind.

Viele Grüße

Daniela.S 25. Feb 2010 18:54

Re: Mit SQL Server Verbinden
 
Naja ich konnte den Code gar nicht testen, weil Delphi7 die Unit so per default nicht kennt. Der Source ist aber bei den Property Editors vorhanden und verweist auf CLSID_DataLinks, was den Default-Windows Dialog bringt, aber keine Liste, die ich irgendwie in einer ComboBox speichern kann. Das kann ich meinen Endusern nicht antun. Die wissen teilweise nicht was die rechte Maustaste ist.

Das Netzwerk kann ich ja auch durchsuchen, daran scheitert es nicht. Nur von der lokalen Installation gibt mir SQLDMO nichts zurück. Das ist aber genau die, die ich brauche.

Danke für den Link, ich schau mal was Colin Wilson so alles hat...

Alter Mann 25. Feb 2010 19:05

Re: Mit SQL Server Verbinden
 
Hallo Daniela S.

SQLDMO funktioniert nur bei lokal installierten SQL-Servern!

Die Unit AdoConEd ist auch bei Delphi 7 Prof vorhanden, schau mal unter
[b]source\property editors[/b} nach, wenn nicht einfach einbinden und testen.

Viele Grüße

Daniela.S 25. Feb 2010 19:20

Re: Mit SQL Server Verbinden
 
*ggg* dass Männer nie zuhören können :roll:

SQLDMO funktioniert vielleicht nur lokal, weil ja auch da installiert, liefert mir aber gerade nicht den Namen der lokalen SQL Server Installation. Wohl aber die, die im Netzwerk vorhanden sind. Warum auch immer der lokale Server nicht in der Liste ist. Über die Angabe von localhost klappt die Verbindung leider nicht.

Die Source von AdoConEd hab ich ja unter den Property Editors gefunden und gesehen dass hier nur ein Windows Dialog aufgerufen wurde. Was aus besagten Gründen nicht wirklich die beste Lösung ist.

Ich glaub ich lass es für heute besser. War ein langer Tag. Funktionieren tut es scheinbar so wie ich er derzeit gelöst habe, aber ob das die richtig schöne Lösung ist muss ich erst auf mehreren Installationen testen.



Trotzdem danke für deine Hilfe :thumb:


guats Nächtle,
Daniela

Sir Rufo 26. Feb 2010 00:29

Re: Mit SQL Server Verbinden
 
So wie das aussieht, ist bei dem lokalen MS-SQL die TCP/IP-Connection nicht eingeschaltet.

Es sollte da ein kleines Tool bei dem SQL-Server dabei sein, wo die Verbindungswege eingestellt werden können.

Zitat:

Zitat von Daniela.S
*ggg* dass Männer nie zuhören können :roll:

können schon ... aber wollen :mrgreen:

Bernhard Geyer 26. Feb 2010 07:45

Re: Mit SQL Server Verbinden
 
Zitat:

Zitat von Alter Mann
SQLDMO funktioniert nur bei lokal installierten SQL-Servern!

Funktioniert bei Netzwerkservern auch. Die nötigen Ports für das Abfragen sind jedoch oft von Lokalen Firewalls geblockt.

Selbst verwenden wir die ODBC-Funktionen (SQLAllocHandle, SQLBrowseConnect, ...), NetServerEnum und SQLDMO. Damit "erwischen" wir schon die überwiegende Anzahl der Server indem wir die einzelergebnisse zusammenschmeißen und duplikate löschen.

Daniela.S 26. Feb 2010 08:31

Re: Mit SQL Server Verbinden
 
Guten Morgen Bernhard,

ich finde es ja irgendwie lustig, dass man aus verschiedenen Funktionen eine Liste "zusammenstückeln" muss. SQLBrowseConnect klingt auf jeden Fall interessant, das werde ich mir mal näher anschauen...

Sir Rufo 26. Feb 2010 10:34

Re: Mit SQL Server Verbinden
 
Zitat:

Zitat von Daniela.S
ich finde es ja irgendwie lustig, dass man aus verschiedenen Funktionen eine Liste "zusammenstückeln" muss. SQLBrowseConnect klingt auf jeden Fall interessant, das werde ich mir mal näher anschauen...

Da die Server über 3 unterschiedliche Wege angesprochen werden können, die jeweils ein-/ausgeschaltet bzw. durch die Firewall geblockt/durchgelassen werden ist eigentlich nicht lustig sondern logisch, dass ich alle 3 Wege prüfen muss, wenn ich die Server gesamt anzeigen möchte.

Der Grund dafür ist ja u.a., dass ich auf dem Client auch die Möglichkeit haben muss, über den jeweiligen Weg zum Server zu gelangen. Ist das entsprechende Protokoll nicht installiert, oder unterstützt meine Komponente diesen Weg nicht, wäre es doch viel fataler dem "geliebten" Enduser einen Server zu präsentieren, den er aber doch nicht erreichen kann.

Lösung:

Bei allen Servern den einen bevorzugten Zugriffsweg einrichten und du brauchst nur eine Abfrage ;)

Daniela.S 26. Feb 2010 11:52

Re: Mit SQL Server Verbinden
 
Gut, von mir aus auch logisch. Kommt auf die Sichtweise an.

Mein Problem ist, dass ich den Server nicht einrichte bzw. allerhöchstens beim Setup über mein Tool nur über eine ini Datei dem SQL Server Setup sage was installiert werden soll. Btw. das funktioniert unter WinXP tadellos, ohne Benutzereingriff und ohne Probleme. Aber ich bringe es seit Wochen nicht zusammen SQL Server Express 2005 oder 2008 auf Windows 7 zum Laufen zu bringen. Geschweige denn irgendwas zu konigurieren. Aber das ist ein anderes Thema.

Mein größtes Prolbem ist, dass ich auf keine mir bekannte Art und Weise die lokale SQL Server Installation zurückbekomme. Egal welche Abfrage ich mache und ich hab hier alle mir bekannten Varianten durch. Was im Netzwerk an SQL Servern rumschwirrt bekomme ich alles und kann mich auch ohne weiteres Verbinden. Ich habe eben noch keine Abfrage, in welcher Form auch immer, die mir den Namen des lokalen Servers zurückgibt. Nur die Krücke über Computernamen/Instanz aus der Registry (was soweit auch funktioniert). Darum frage ich mich wie Microsoft das in der Managemant Konsole bei der Anmeldung macht, denn da erscheint alles - Netzwerk und Lokal.

needatip 27. Feb 2010 16:00

Re: Mit SQL Server Verbinden
 
Hallo,
vielleicht hilft das hier weiter
List Available SQL Servers
The ListAvailableSQLServers fills in the TStrings object passed as the only argument. This method retrieves all available SQL Server instances on a network. List SQL Network Servers

Daniela.S 1. Mär 2010 06:48

Re: Mit SQL Server Verbinden
 
Schönen Guten Morgen,

danke, die Funktion von der besagten Seite hatte ich schon versucht gehabt. Liefert leider auch nur Server im Netzwerk, aber nicht die Instanz, die am lokalen Server läuft.

Ich habe am Wochenende irgendwo auf der MSDN Seite gefunden, dass der lokale Server auch über Computername\Instanzname (so wie ich es derzeit implementiert habe) angesprochen wird. Scheint also als wäre diese Möglichkeit offiziell abgesegnet. Also lass ich das mal so...

Danke für eure Hilfe,
Daniela


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:37 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