Cum se obține o listă de nume de server disponibile și o listă de baze de date

Cum se obține o listă de nume de server disponibile și o listă de baze de date

Subzh.
Asta este, există mai multe servere mssql, au mai multe baze de date pe ele, cum pot obține numele acestor servere, și apoi numele de bază de date, respectiv. Toate acestea sunt, desigur, necesare pentru a compune un șir de conexiuni pentru ado.







Obțineți lista serverelor din lista de servere înregistrate în software-ul client MSSQL

Nu mi-am spus exact. Cum pot obține acest lucru în timpul executării aplicației?

Dacă poți. ușor mai mult?

Ei bine, cum să scapi de lista de baze?

se pare că vorbești despre lucruri diferite

funcția TDMod.GetSQLServers (ServersItems: TStrings): boolean;
var NumeList, Cerere: OleVariant;
i: Integer;
începe
rezultat: = false;
încerca
încerca
Aplicație: = CreateOleObject ("SQLDMO.Application");
NumeList: = Application.ListAvailableSQLServers;
Pentru i: = 1 la NameList.Count face
ServersItems.Add (NumeList.Item (i));
rezultat: = adevărat;
cu excepția
pe E: excepție fac DoIfError (E.Message);
se încheie;
în cele din urmă
NumeList: = Neasignat;
Aplicație: = Neasignat;
se încheie;
se încheie;

dar poate că ai nevoie doar de unul dintre feng-urile
EditConnectionString (ADOConnecție) // Modul AdoConed
PromptDataSource (Handle, ComboBox1.Text) // modul ADODB

Utilizarea SQLDMO:
var
FDMOApplication. varianta;
Nume. varianta;
i. întreg;
începe
încerca
FDMOApplication: = CreateOleObject ("SQLDMO.Application");
Nume: = FDMOApplication.ListAvailableSQLServers;
pentru i: = 1 la Nume.Count
lbServers.Items.Add (Nume.Item (i));
în cele din urmă
FDMOApplication: = Null;
se încheie;
se încheie;
Aici, în caseta combo lbServers, este adăugată o listă a serverelor MSSQL găsite în rețea. O condiție necesară este clientul instalat MSSQL.

listă din serverele MSSQL găsite în rețea
S-a găsit cu precizie?

Dacă în clientul meu MSSQL același server fizic este înregistrat sub zece nume, câte servere vor "găsi" SQLDMO?
Bănuiesc că toate cele 10 piese și "găsiți". Și "arata" că nu va fi online, ci în registru.

Și dacă găsește unul fizic și este înregistrat de două ori în client (unul pentru MultiProtocol, cel de-al doilea pentru TCP / IP), cum voi găsi un (găsit) nume care funcționează pe TCP / IP?

Nu are nimic de-a face cu înregistrarea serverelor pe client. Apropo, în timpul execuției durează o perioadă considerabilă de timp - în registru puteți găsi deja de multe ori.

Da, de fapt, nu sunt împotriva a ceea ce caută. Vorbesc despre altceva.
Când configurez clientul MSSQL, am stabilit câțiva parametri pe care îi doresc pentru mine. Toate acestea sunt amintite în aliasul creat (Utilitarul de rețea client)






Numele de alias este numele meu SERVER (pentru a lucra prin BDE de exemplu).
Prin specificarea diverselor nume de alias înregistrate în client, pot influența protocolul utilizat, criptarea traficului, portul de server și așa mai departe.
Întrebare: Dacă SQLDMO nu se uită la registru, dar returnează numele NetBios al serverului fizic (sau ce se întoarce la mine?), Care este beneficiul practic pentru mine din acest nume?
Apropo, atunci când executarea durează un timp considerabil
Cred că a primit o listă din registru, încearcă fiecare alias pe o conexiune

Am înregistrat doar 5 servere, SQLDMO returnează de două ori mai multe nume, inclusiv din alte domenii, deci nu există nicio îndoială că nu se citește din registru. De asemenea, nu încercați o conexiune, pentru că unele servere sunt oprite, dar în listă primiți. Iar avantajele acestui lucru sunt, mai ales în rețele mari, cu un număr mare de clienți și mai multe servere. Un alt lucru este că Utilitarul pentru rețeaua de clienți vă oferă posibilitatea de a cere mult mai mult, dar totuși este mai bine decât nimic.

Nu ați încercat SQLDMO. Recunosc că, chiar și fără aliasuri înregistrate în client, pot găsi servere. În aceeași rețea ca și clientul! Și dacă serverul este de fapt disponibil, dar se află într-o altă rețea? Cum l-ai căuta în locul lui SQLDMO?

pot fi înregistrate în grupuri

oApp: = CreateOleObject ("SQLDMO.Application");
pentru i: = 1 la oApp.ServerGroups.Count do
începe
pentru j: = 1 la oApp.ServerGroups.item (i) .RegisteredServers.Count do
Memo1.Lines.Add ((oApp.ServerGroups.item (i) .RegisteredServers.Item (j). Nume));
se încheie;
oApp: = Nealocat;

Bine, o să verific eu, nu pe subrețele, ci pe rețele diferite.
Apoi o altă ultimă întrebare pentru astăzi:
Mi-a spus la SQLDMO că există un astfel de server numit "AnotherServer" (în client nu este înregistrat pentru mine)
Aplicația mea (admisibilă) necesită ca lucrarea să treacă prin multiprotocol cu ​​criptarea traficului. Cum folosesc numele primit "AnotherServer" pentru a satisface dorința aplicației?

Cred că este pur și simplu imposibil să învăț cu ajutorul acestui caz o anumită specificitate a unei anumite conexiuni de client.

Da, nu trebuie să cunoașteți specificul aplicației. Și pentru a face ca partea clientului să funcționeze în modul MSSQL așa cum o vreau (folosind doar numele returnat de SQLDMO)

Puteți utiliza NetServerEnum cu servertype = SV_TYPE_SQLSERVER

aceasta este pentru obținerea de servere SQL. ;)

Date inițiale:
- Două rețele de clasă "C", configurate corect și care rulează rutare, nu există firewall-uri.
- Nu există controlori de domeniu, toți gazdele sunt "singuri în picioare"
- Prima rețea a fost instalată, dar nu există servere SQL care rulează. În aceeași rețea, calculatorul meu cu un program de testare
- A doua rețea are un server SQL instalat și pornit.
- În clientul MSSQL (pe mașina mea din prima rețea) toate serverele din ambele rețele + servere sunt înregistrate, accesul la care este posibil numai prin dialup
(fără conexiune la momentul verificării)

rezultate:
- GetSQLServers au afișat toate pseudonimele înregistrate în client.
- După eliminarea unui alias care rulează pe a doua rețea de servere, GetSQLServers nu găsește acest server
- După ce a pornit pe prima rețea de servere și a șters aliasul, GetSQLServers nu găsește acest server

Când se utilizează codul sniknik, apare o eroare la crearea obiectului "SQLDMO.application".
"Varianta nu se referă la un obiect de automatizare"

Prompt. ce nu este corect?

a citit inadecvat postul său

) Am pus unul la altul. Clientul merită. Pe prima linie
pop-up Aplicație: = CreateOleObject ("SQLDMO.Application");

Apropo, puteți utiliza UDP

Poți. Și dacă serverul se află într-o altă rețea?







Articole similare

Trimiteți-le prietenilor: