Hogyan szerezhető be a rendelkezésre álló kiszolgálónevek listája és az adatbázisok listája

Hogyan szerezhető be a rendelkezésre álló kiszolgálónevek listája és az adatbázisok listája

Subzh.
Vagyis több mssql szerver van, több adatbázis is van rájuk, hogyan lehet először a szerverek nevét, majd az adatbázis nevét. Mindez természetesen szükség van egy összekötő karakterlánc összeállítására.

Szerezd meg a szerverek listáját a regisztrált szerverek listájáról az MSSQL ügyfélszoftverben

Nem mondtam pontosan. hogyan szerezhetem be ezt az alkalmazás végrehajtása során?

Ha tudsz. kicsit többet telepítettek?

Nos, hogyan lehet kiállítani a bázisok listáját?

úgy tűnik, hogy különböző dolgokról beszél

funkció TDMod.GetSQLServers (ServersItems: TStrings): logikai;
var Névlista, Alkalmazás: OleVariant;
i: Integer;
kezdődik
eredmény: = hamis;
megpróbál
megpróbál
Alkalmazás: = CreateOleObject ("SQLDMO.Application");
Névlista: = Application.ListAvailableSQLServers;
Az i: = 1-nek a NameList.Count számára
ServersItems.Add (NameList.Item (i));
eredmény: = true;
kivéve
az E-re: kivétel a DoIfError (E.Message);
végén;
végül
NameList: = Unassigned;
Alkalmazás: = Nincs hozzárendelve;
végén;
végén;

de talán csak szüksége van az egyik feng lövésre
EditConnectionString (ADOConnection) // AdoConed modul
PromptDataSource (Handle, ComboBox1.Text) // modul ADODB

SQLDMO használata:
var
FDMOApplication. Variant;
Nevek. Variant;
i. integer;
kezdődik
megpróbál
FDMOApplication: = CreateOleObject ("SQLDMO.Application");
Nevek: = FDMOApplication.ListAvailableSQLServers;
az i: = 1 névhez
lbServers.Items.Add (Names.Item (i));
végül
FDMOApplication: = Null;
végén;
végén;
Itt a lbServers combo boxban hozzáadódik a hálózaton található MSSQL kiszolgálók listája. A szükséges feltétel a telepített MSSQL kliens.

a hálózatban található MSSQL-kiszolgálók listája
Pontosan megtalálható?

Ha az én MSSQL ügyfelemben ugyanaz a fizikai szerver regisztrálva van tíz név alatt, hány szerver fog megtalálni az SQLDMO-t?
Gyanítom, hogy mind a 10 darab és a "find". És "nézd", hogy nem lesz online, de a rendszerleíró adatbázisban.

És ha egy fizikust talál, és kétszer regisztrálva van az ügyfélben (az egyik a MultiProtocol, a második a TCP / IP számára), hogyan fogom megtalálni az (egy) nevet, amely a TCP / IP-n dolgozik?

Nincs semmi köze a szerverek regisztrációjához az ügyfélen. Egyébként a végrehajtás során jelentős idő telik el - a rendszerleíró adatbázisban már sokszor megtalálható.

Igen, valójában nem vagyok ellene, amit keres. Valami másról beszélek.
Az MSSQL kliens beállításakor néhány paramétert állítottam be magamnak. Mindegyikük a létrehozott álnévben (Client Network Utility) emlékezett,
Az álnév neve a SZERVER NÉV (például a BDE használatához).
A kliensben regisztrált különböző álnevek megadásával befolyásolhatom az alkalmazott protokollt, a forgalom titkosítást, a kiszolgáló portot és így tovább.
Kérdés: Ha az SQLDMO nem figyeli a rendszerleíró adatbázist, de visszaadja a fizikai kiszolgáló NetBios nevét (vagy mit tér vissza hozzám?), Mi a gyakorlati előny a számomra?
Egyébként a végrehajtás figyelemre méltó időt vesz igénybe
Azt hiszem, van egy listája a rendszerleíró adatbázisból, minden egyes álnevet megpróbál egy kapcsolaton

Csak 5 kiszolgálót regisztráltam, az SQLDMO kétszer annyi nevet ad vissza, többek között más tartományokból is, így kétségtelen, hogy nem olvassa fel a rendszerleíró adatbázisból. Nem próbálja meg a kapcsolatot, mert egyes szerverek le vannak állítva, de a listában kapnak. És ennek előnyei, különösen nagyszámú ügyfél és több kiszolgáló nagy rácsaiban. A másik dolog az, hogy a Client Network Utility lehetőséget ad arra, hogy sokkal többet kérjen, de még mindig jobb, mint a semmi.

Nem próbáltam meg SQLDMO-t. Bevallom, hogy még az ügyfelek bejegyzett aliasai nélkül is találhatnak szervereket. Ugyanabban a hálózatban, mint az ügyfél! És ha a kiszolgáló ténylegesen elérhető, de más hálózaton van? Hogyan keresi azt az SQLDMO helyett?

csoportokban lehet regisztrálni

oApp: = CreateOleObject ("SQLDMO.Application");
az i: = 1-től oApp.ServerGroups.Count do
kezdődik
j: = 1-től oApp.ServerGroups.item (i) .RegisteredServers.Count nem
Memo1.Lines.Add ((oApp.ServerGroups.item (i) .regisztráltServers.Item (j) .Name));
végén;
oApp: = Nincs hozzárendelve;

Oké, megnézem magam, és nem az alhálózatokon, hanem a különböző hálózatokon.
Akkor még egy utolsó kérdés ma:
Mondta nekem, hogy az SQLDMO-nak létezik ilyen "AnotherServer" nevű szerver (az ügyfélben nincs regisztrálva)
Alkalmazásom (elfogadható) megköveteli, hogy a munka a forgalom titkosításával több protokollon keresztül haladjon át. Hogyan használhatom a kapott "AnotherServer" nevet az alkalmazás vágyának kielégítésére?

Úgy vélem, hogy ez egyszerűen lehetetlen - az ügy segítségével megtanulni egy adott ügyfélkapcsolat bizonyos sajátosságait.

Igen, nem kell tudnia az alkalmazás sajátosságairól. És hogy az MSSQL kliens részét az SQLDMO által visszaküldött név használatával dolgozzam ki,

Használhatja a NetServerEnum-ot a servertype = SV_TYPE_SQLSERVER paranccsal

ez az SQL szerverek beszerzésére szolgál. ;)

Kezdeti adatok:
- Két "C" osztályú hálózat, megfelelően beállítva és futva fut, nincsenek tűzfalak.
- Nincsenek tartományvezérlők, minden tárhely "magányos"
- Az első hálózat telepítve van, de nincsenek futó SQL szerverek. Ugyanabban a hálózatban a számítógépem egy tesztprogrammal
- A második hálózat rendelkezik egy telepített és elindított SQL szerverrel.
- Az MSSQL kliensben (az első hálózatban lévő gépemben) mindkét hálózat + kiszolgálón lévő kiszolgáló regisztrálva van, amelyhez csak telefonos hozzáféréssel lehetséges
(az ellenőrzés idején nincs kapcsolat)

találatok:
- A GetSQLServers megmutatta az ügyfélben regisztrált összes álnevet.
- A második szerverhálózaton futó alias eltávolítása után a GetSQLServers nem találja ezt a kiszolgálót
- Az első kiszolgálói hálózat elindítása és az alias törlése után a GetSQLServers nem találja ezt a kiszolgálót

A sniknik kód használata során hiba történik az "SQLDMO.application" objektum létrehozásakor.
"A változat nem utal egy automatizálási objektumra"

Prompt. mi nem helyes?

figyelmen kívül hagyja a beosztását

) Tettem egy-egy. Az ügyfél megéri. Az első sorban
pop-up Alkalmazás: = CreateOleObject ("SQLDMO.Application");

By the way, használhatja az UDP-t

Tudod. És ha a kiszolgáló egy másik hálózaton van?

Kapcsolódó cikkek