Cómo obtener todos los servicios de SQLServer en la LAN
Cómo hacerlo en Obtener todo. Servicios de SQL Server en LAN Por Anónimo Siempre he querido obtener información más detallada sobre SQL Server en mi aplicación. Quería obtener información más detallada sobre SQL Server en mi aplicación. Hasta hace poco, podía lograr esto usando SQLDMO (Objetos de administración distribuida de SQL), que proporciona características muy poderosas que nos permiten implementar casi todas las funciones de SQL Server mediante programación. En este artículo, le mostraré cómo obtener todos los servidores SQL en su LAN, cómo conectarse a ellos y cómo obtener todas las bases de datos en ellos.
El objeto SQLDMO proviene de la biblioteca de vínculos dinámicos SQLDMO.dll proporcionada por SQL Server 2000. El dll en sí es un objeto COM; primero debe hacer referencia a la biblioteca de objetos Microsoft SQLDMO (versión 8.0) desde la biblioteca de tipos. Delphi generará automáticamente el archivo SQLDMO_TLB.PAS, que contiene todas las interfaces de objetos COM.
Lo que hay que tener en cuenta aquí es que debido a que varios nombres de clases predeterminados, como ?TDatabase? y ?TApplication?, introducidos por SQLDMO, entran en conflicto con los nombres de clases que vienen con Delphi, se pueden modificar al formato _TypeName. . U otro nombre, lo cambié aquí a T_Application, T_Database, etc.
El siguiente paso es introducir el archivo unitario SQLDMO_TLB.PAS en el programa. El nombre de la unidad de aplicación es SqlServers
La lista de servidores son todos los servidores SQL SERVER en la LAN. Seleccione el servidor e ingrese el nombre de usuario y la contraseña, despliegue la lista de bases de datos y el programa enumerará todas las bases de datos. el servidor.
El código fuente del programa es el siguiente:
Unidad SqlServers;
Interfaz
Propósito
Windows, mensajes, SysUtils, clases, gráficos, controles, formularios.
SQL_DMO : _SQLServer;
lConectado : booleano;
fin;
tipo
TdmoObject = registro
SQL_DMO : _SQLServer;
lConectado : booleano;
fin;
tipo
TFormServersList = clase(TForm )
Etiqueta1: TLabel;
Etiqueta2: TLabel;
CB_ServerNames: TComboBox;
CB_DataNames: TComboBox;
Etiqueta3: TLabel;
Etiqueta4: TLabel;
Ed_Login: TEdit;
Ed_Pwd: TEdit;
BitBtn1: TBitBtn ;
BitBtn2:
procedimiento FormCreate(Remitente: TObject);
procedimiento FormCloseQuery(Remitente: TObject; var CanClose: Boolean);
procedimiento FormClose(Remitente: TObject; var Acción: TCloseAction);
procedimiento FormShow(Remitente. TObject; var Acción: TCloseAction);
server_Names: TStringList;
//Colección de objetos
PdmoObject: matriz TdmoObjects;
//Obtener todos los servidores remotos
Función GetAllServers( ServerList : TStringList): booleano;
{declaración privada}
pública
{declaración pública}
fin;
var
FormServersList: TFormServersList;
implementación
{$R *.DFM}
{ TForm1 }
Función TFormServersList.GetAllServers (ServerList: TStringList): booleano;
var
sApp: _Application;;
sName: NameList;
iPos : entero;
comenzar
Resultado := Verdadero
probar
sApp := CoApplication_.> excepto<; /p>
Resultado := Falso;
Salir;
fin;
si sName.Count > 0 entonces // iPos comienza en 1 porque 0 es nulo, es decir, ''
para iPos := 1 a
sName.Create;
si no es GetAllServers(server_Names) entonces
comienza
Application.MessageBox('No se puede obtener la lista de servidores, puede que falte función de biblioteca DLL del lado del cliente', 'Mensaje de error').MessageBox('No se puede obtener la lista de servidores, puede que falte la función de biblioteca DLL del cliente', 'Mensaje de error',MB_OK);
salir;
end;
para lcv := 0 a server_Names.Count - 1 do
comenzar
SetLength(PdmoObject,lcv + 1 );
con PdmoObject[lcv] hacer
comenzar
SQL_DMO := CoSQLServer.Create;
SQL_DMO.Name := Recortar (server_Names[lcv]);
//Atributos de seguridad de inicio de sesión. Items.Count > 0 y luego //lista todos los nombres de servidores
CB_ServerNames.Text := CB_ServerNames.Items.Strings[0];
end;
procedimiento TFormServersList.BitBtn2Click(Remitente: TObject);
Inicio
Cerrar;
Fin;
procedimiento TFormServersList.BitBtn2Click(Remitente: TObject
Inicio
Cerrar;
Fin;
procedimiento TFormServersList.BitBtn2Click(Remitente: TObject
<); p>InicioCerrar;
Fin.
CB_DataNamesDropDown(Remitente: TObject);
var
icount, Server_B: entero;
comenzar
CB_DataNames.Clear;
Screen.Cursor := CrHourGlass;
Server_B := CB_ServerNames.Items.IndexOf(CB_ServerNames.Items.IndexOf)MessageBox('Compruebe si el nombre de usuario o la contraseña son correctos','Error de conexión ',MB_OK);
Salir
finalizar;
si no VerifyConnection(SQLDMOConn_ ReconnectIfDead) entonces
comenzar
ShowMessage('Error al intentar conectarse a SQL SERVER 2000' + #10#13 +
'Asegúrese de agregar la biblioteca de conexión dinámica SQLDMO.DLL');
salir;
fin
fin más
fin más
PdmoObject[Server_B].lConectado := Verdadero ; p>
Databases.Refresh(true);
para icount := 1 para Bases de datos.
CB_DataNames.Items.Add(Databases.Item(icount,null).name );
fin;
Screen.Cursor := CrDefault ;
fin
fin.