Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Conexion ADO en tiempo de ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=75467)

LIGERO 26-08-2011 03:40:21

Conexion ADO en tiempo de ejecucion
 
Buenas amigos.

Tengo SQL Server 2008 R2 express instalado y estoy realizando un programa que tienes que ejecutarse en varios ordenadores.
El programa debe acceder a la base de datos del servidor y para ello me gustaría poder hacer un formulario que cuando se ejecute el pregrama por primera vez acceda a los servidores SQL y los muestre en una lista y luego pida el usuario y el password.

He visto algo con Sql-DMO pero en esta versión de Sql no está incluido.

¿Como puedo hacerlo?

Muchas gracias

Chris 26-08-2011 19:31:59

En qué realmente estás teniendo problemas? En iniciar sesión con la cuenta de usuario o en listar los servidores SQL Servers disponibles en tu red de área local?

Saludos,
Chris

LIGERO 26-08-2011 22:28:54

Bueno, ya no tengo problema.
Encontré esta función y con un poquito de código mas, puedo acceder a los servidores SQL server que tengo instalados en mi red.

Código:

procedure ListAvailableSQLServers(Names : TStrings);
var
  RSCon                    : ADORecordsetConstruction;
  Rowset                  : IRowset;
  SourcesRowset            : ISourcesRowset;
  SourcesRecordset        : _Recordset;
  SourcesName, SourcesType : TField;
begin
  OleCheck(CoCreateInstance(CLASS_Recordset, nil, CLSCTX_INPROC_SERVER or
                            CLSCTX_LOCAL_SERVER, IUnknown, SourcesRecordset) );
  RSCon := SourcesRecordset as ADORecordsetConstruction;
  SourcesRowset := CreateComObject(ProgIDToClassID('SQLOLEDB Enumerator'))
                  as ISourcesRowset;
  OleCheck(SourcesRowset.GetSourcesRowset(nil, IRowset, 0, nil, IUnknown(Rowset)));
  RSCon.Rowset := RowSet;
  with TADODataSet.Create(nil) do
  try
    Recordset := SourcesRecordset;
    SourcesName := FieldByName('SOURCES_NAME'); { do not localize }
    SourcesType := FieldByName('SOURCES_TYPE'); { do not localize }
    Names.BeginUpdate;
      try
        while not EOF do
        begin
          if (  (SourcesType.AsInteger = DBSOURCETYPE_DATASOURCE) and
                (SourcesName.AsString <> '')
            )
          then
            Names.Add(SourcesName.AsString);
          Next;
        end;
      finally
        Names.EndUpdate;
    end;
  finally
    Free;
  end;
end;

Muchas gracias a todos y espero que os pueda servir a algunos.


La franja horaria es GMT +2. Ahora son las 21:39:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi